- Ubuntu - Docker # 2015-01-28: ネットワークの設定
古い環境を apt dist-upgrade して Ubuntu 16.04.5 LTS から Ubuntu 16.04.6 LTS にしたら、コンテナからネットワークに繋がらなくなった。
確認してみると /etc/default/docker の設定が systemctl start docker した際に反映されてないらしく、
「docker No non-localhost DNS nameservers are left in resolv.conf systemd /etc/default/docker」でググると、
systemd だと /etc/default/docker が効かなくなってるらしい。
んじゃなんで、docker.io に /etc/default/docker 含まれてんだよと思うけど、先頭に
確認してみると /etc/default/docker の設定が systemctl start docker した際に反映されてないらしく、
$ sudo docker run -i -t --rm xymon cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 8.8.8.8 nameserver 8.8.4.4みたいになってて、status にも
$ systemctl status docker | grep DNS 1月 23 21:25:55 host dockerd[911]: time="2020-01-23T21:25:55.912203897+09:00" level=info msg="No non-localhost DNS nameservers are left in resolv.conf. Using default external servers: [nameserver 8.8.8.8 nameserver 8.8.4.4]"みたいな表示が。
「docker No non-localhost DNS nameservers are left in resolv.conf systemd /etc/default/docker」でググると、
- Qiita / hirosemi / 2016-10-11: systemd起動のDockerでdnsオプションを有効にする
systemd だと /etc/default/docker が効かなくなってるらしい。
んじゃなんで、docker.io に /etc/default/docker 含まれてんだよと思うけど、先頭に
# Docker Upstart and SysVinit configuration fileとか書いてあって、なぜか systemd が排除されてる。
なんで排除されてんのか気になるが、これを systemd からも読ませてやることに。
上記ページで紹介されてた、
空の ExecStart= はなんじゃこりゃ?って感じだけど、/lib/systemd/system/docker.service の設定を上書きするためにはこれが重要らしい。
結果
じゃぁなんで /etc/default/docker を最初から systemd に読ませないんだ?って思うんだが、なんでだよ???
あと、なぜか、英語版には日本語版にある記述がないし、章立ても違う気がする。
Beta から大幅改定でもあったのかな?
上記ページで紹介されてた、
- Docker ドキュメント日本語化プロジェクト (Docker-docs-ja 17.06.Beta) / Docker Engine / 管理 / systemd で Docker の管理・設定
空の ExecStart= はなんじゃこりゃ?って感じだけど、/lib/systemd/system/docker.service の設定を上書きするためにはこれが重要らしい。
[Service] EnvironmentFile=-/etc/default/docker ExecStart= ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_OPTS
結果
docker daemon-reload docker restart dockerみたいにしてやると、無事設定が反映された。
じゃぁなんで /etc/default/docker を最初から systemd に読ませないんだ?って思うんだが、なんでだよ???
あと、なぜか、英語版には日本語版にある記述がないし、章立ても違う気がする。
Beta から大幅改定でもあったのかな?
- docker docs
- latest / Run your app in production / Configure the daemon / Control Docker with systemd
- v17.06 / Run your app in production / The basics / Control and configure Docker with systemd
タグ
コメントをかく