📝
DockerのAPIをTCPで待受させる
動機
家に数台の Docker を走らせる VM が存在している。それをまとめて Web で監視する為に、Portainer を導入した。
Portainer は、リモートの Docker を管理する事ができるが、デフォルトでは dockerd は TCP 経由の API アクセスができない。
これを変更する方法をメモする。
環境
- Ubuntu 18.04.2 LTS
- Docker version 18.09.5, build e8ff056 (docker 公式ページの apt リポジトリ使用インストール)
解決方法
解決方法は二つある。 どちらか片方を選択すること(両方やってはいけない)
なお、失敗すると、dockerd が起動しなくなる。
方法その 1
systemd の定義を変更して、 dockerd コマンドラインを変更する(直接指定)
`# systemctl edit dockerd.service
<エディタが開くので以下の内容で上書き>
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
方法その 2
systemd の定義を変更して、 dockerd コマンドラインを変更し、JSON の内容を反映可能にする
`# systemctl edit dockerd.service
<エディタが開くので以下の内容で上書き>
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
/etc/docker/daemon.json
を以下の内容で作成する。 ディレクトリ・ファイルが存在しない場合は作成する。
(デフォルトでは存在しない)
{
"hosts": ["fd://", "unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}
# dockerd を再起動する
sudo systemctl restart dockerd.service
なぜこんなことをするのか
dockerd の起動パラメタに -H
が指定されていると、 /etc/docker/daemon.json
に hosts
が指定されていると
エラーが発生して起動しなくなってしまうことが原因。
Discussion