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 コマンドラインを変更する(直接指定)
1 | `# systemctl edit dockerd.service |
方法その 2
systemd の定義を変更して、 dockerd コマンドラインを変更し、JSON の内容を反映可能にする
1 | `# systemctl edit dockerd.service |
/etc/docker/daemon.json を以下の内容で作成する。 ディレクトリ・ファイルが存在しない場合は作成する。
(デフォルトでは存在しない)
1 | { |
1 | # dockerd を再起動する |
なぜこんなことをするのか
dockerd の起動パラメタに -H が指定されていると、 /etc/docker/daemon.json に hosts が指定されていると
エラーが発生して起動しなくなってしまうことが原因。