Docker Engine デーモンを外部から操作するTCP公開設定手順

1. 前提:Docker Engine のインストール

CentOS Stream 9 / RHEL 9 系を想定し、公式リポジトリから Docker Engine 24.x をインストール済みとします。

2. systemd ユニットファイルの編集

デーモン起動オプションに TCP エンドポイントを追加します。

# /etc/systemd/system/docker.service.d/override.conf を作成
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/override.conf > /dev/null <<'EOF'
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd \
          -H unix:///var/run/docker.sock \
          -H tcp://0.0.0.0:2376
EOF

上記は systemctl edit docker を使っても同じ内容を追加できます。

3. ファイアウォールとデーモンの再読み込み

sudo firewall-cmd --permanent --add-port=2376/tcp
sudo firewall-cmd --reload
sudo systemctl daemon-reload
sudo systemctl restart docker

4. 補完スクリプトの導入(任意)

sudo dnf install -y bash-completion
source /etc/profile.d/bash_completion.sh

5. 動作確認

5-1. ローカルでの疎通テスト

curl -s http://localhost:2376/version | jq .

期待されるレスポンス例(一部抜粋):

{
  "Platform": { "Name": "Docker Engine - Community" },
  "Components": [
    { "Name": "Engine", "Version": "24.0.7" }
  ],
  "Version": "24.0.7",
  "ApiVersion": "1.43"
}

5-2. リモートホストからの接続

docker -H tcp://192.168.10.50:2376 info

6. 複数ホストを切り替える便利な方法

6-1. 環境変数による切り替え

export DOCKER_HOST=tcp://192.168.10.50:2376
docker ps

6-2. Docker Context を使った切り替え

# 登録
docker context create node50 --docker host=tcp://192.168.10.50:2376
docker context create node51 --docker host=tcp://192.168.10.51:2376

# 一覧
docker context ls

# 切り替え
docker context use node50
docker images
docker context use node51
docker images

7. セキュリティ補足

本記事では簡便のため TLS 無効化しています。本番利用時は以下を必ず実施してください。

  • CA 証明書を発行し、サーバ・クライアント双方に配置
  • --tlsverify オプションを追加
  • ポート 2376 を信ネットワーク以外で塞ぐ

タグ: Docker Engine systemd remote API Docker Context TCP socket

7月5日 19:03 投稿