hack のためのネタ帳, etc,,,

承前

状況

古い環境を apt dist-upgrade して Ubuntu 16.04.5 LTS から Ubuntu 16.04.6 LTS にしたら、コンテナからネットワークに繋がらなくなった。
確認してみると /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」でググると、 が見つかったんだけど、
systemd だと /etc/default/docker が効かなくなってるらしい。

んじゃなんで、docker.io に /etc/default/docker 含まれてんだよと思うけど、先頭に
# Docker Upstart and SysVinit configuration file
とか書いてあって、なぜか systemd が排除されてる。

解決方法

なんで排除されてんのか気になるが、これを systemd からも読ませてやることに。

上記ページで紹介されてた、 を参考に、以下のファイルを作成して、/etc/default/docker を読み込ませて、ExecStart に反映させてみた。
空の ExecStart= はなんじゃこりゃ?って感じだけど、/lib/systemd/system/docker.service の設定を上書きするためにはこれが重要らしい。

/etc/systemd/system/docker.service.d/docker.conf

[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 から大幅改定でもあったのかな?

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます