48
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

systemd起動のDockerでdnsオプションを有効にする

Posted at

はじめに

Proxy配下のUbuntu上で docker build の際にdns設定で困ってしまいました。Dockerfileに書かれたyumの最中に、外部のネットワークに到達できずに止まってしまいます。
proxy設定はbuildのオプションで渡せますが、dnsのオプションはありません。対処方法をメモに残します。

環境

  • Ubuntu 16.04
  • Docker 1.12.1

Dockerはパッケージでインストールしています。

そもそもの原因

  • dockerのホストであるUbuntuでは、デフォルトでdnsmasq が有効になっていて、 /etc/resolv.confが下記のように自分を見る設定になっている。
/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 127.0.1.1
search xxx.jp
/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
search xxx.jp

nameserver 8.8.8.8
nameserver 8.8.4.4
  • docker build中にyumやらやっていると、proxyの名前解決をしようとして、8.8.8.8に問い合わせしようとするが、ネットワーク的に到達できずにこける。

ちなみにbuildしようとしているDockerfileはこちら。
https://github.com/Mashape/docker-java8/blob/master/Dockerfile
yumやらwgetやらやっています。

対応方法

はじめ、 /etc/default/docker を修正しましたが、設定が効きませんでした。dockerがsystemd起動なので、/etc/default のほうは見ないらしいです。

http://docs.docker.jp/engine/admin/systemd.html#custom-docker-daemon-options
を参考に以下のようにしています。

/etc/systemd/system/docker.service.d/docker.conf
[Service]
Environment="DOCKER_NETWORK_OPTIONS=--dns dnsサーバのIP"
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_NETWORK_OPTIONS

本当はお作法的にはEnvironmentFileを設定してそちらにEnvironmentを書くべきだと思うのだけれど、どこにファイルを作るかを考えあぐねてこうなっています。

systemdのリロードとdockerの再起動。

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

念のためshowで確認。

$ systemctl show --property=Environment docker
Environment=DOCKER_NETWORK_OPTIONS=--dns\x20dnsサーバのIP HTTP_PROXY=http://your-proxy:port/

HTTP_PROXYを/etc/systemd/system/docker.service.d/http-proxy.conf で設定しているので一緒に見えています。

この状態で docker build したらやっと最後までできました。

$ docker build -t centos_java8 --build-arg http_proxy=http://your-proxy:port/ --build-arg https_proxy=http://your-proxy:port/  .

もしや

buildで引き渡すhttp_proxyをIPで書けばこんなことしなくてもいいんじゃネ、って気がしなくもないけど試してない。

48
41
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?