Ubuntu 16.04でDocker Daemonの設定

発端

先日自宅サーバーの大幅な整備を行ったのですが、OSをUbuntu 14.04からUbuntu 16.04に更新したところDocker Swarmのノードとして認識されなくなってしまいました。

ノードのOSを全てアップグレードする予定だったので、解決策を模索して見ました。

調査

どうやらSwarmマネージャからノードへの通信ができていないようだったので、netstatでポートを見てみると/etc/default/dockerで設定したポートが開いていませんでした。

調べてみるとUbuntu 16.04ではDockerはsystemdから起動されるらしく、systemdは/etc/default/dockerを読んでいないようです。

Ubuntu 14.04ではupstartから起動が行われていましたので、/etc/default/dockerを編集すればよかったのですが、これではダメみたいですね。

この辺りは、公式ドキュメントに詳しく書いてあります。

解決策

そこで、systemdから起動した場合でも読んでくれる設定ファイルを探したところ、/etc/docker/daemon.jsonというファイルを編集すれば良さそうというドキュメントを見つけました。

このファイルはjsonなので、過去のようにDOCKER_OPTS=のように記述することはできません。

書式については、公式ドキュメントが参考になりました。

設定値については、特に調べなくてもスムーズに移行ができました。

なんとなくですが、jsonの方がメンテしやすそうで良いですよね(笑

このファイルを編集した後に、

# systemctl restart docker

とすれば、設定が反映されます。

ただし、再起動時に以下のエラーが出るようです。

unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives are specified both as a flag and in the configuration file: hosts:

これについては、/lib/systemd/system/docker.serviceの記述を変更することで対応できますが、編集して良いものなのかわからないので、最終的にはsystemdからの起動をやめて、コマンドからデーモンを起動する方が良いんでしょうかね。

この辺りのスレッドでも触れられているので、見てみると良いのかもしれません。

これについては、もう少し調査を行ってみようと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です