CentOS7サーバ上DockerコンテナでDNS解決されない時は
Contents
dockerコンテナ内でDNS名前解決されない
本番サーバーを以下の環境で構築する場合。
- CentOS7
- Docker
Dockerコンテナ内から外部のエンドポイントにアクセスするとき、DNS名前解決できず困ったことがある。 以下の2つのうちどちらかの方法でコンテナにDNSを指定することで解決できた。
docker-compose.ymlでDNS直接指定
docker-compose.ymlに以下のように記述。
version: '3.3' services: app: restart: always dns: 8.8.8.8
resolv.confマウント
以下のresolv.confを作成し、コンテナ内の/etc/resolv.confにvolumeマウント。
search google.internal nameserver 8.8.8.8 options ndots:0
サーバー再起動後にdockerコンテナ内でDNS名前解決されない
上記対策をしたにも関わらず、サーバーがrebootした後、DNSによる名前解決がなされないことがある。
docker.serviceが起動する時に、network-online.targetが先に起動していることが必要で、docker.serviceの[Unit]はデフォルトで以下のようになっている。
[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com BindsTo=containerd.service After=network-online.target firewalld.service containerd.service Wants=network-online.target Requires=docker.socket
これでもなぜかサーバーのネットワークの設定が終わりきる前にdocker.serviceが起動してしまうことがあるのだ。そんな時はdocker.serviceの[Service]に以下を追加するという情報を発見。
[Service] ExecStartPre=/bin/sleep 5
5秒待つという無理やりな方法。しかしこれで問題なく起動した。
参考: https://github.com/clearlinux/distribution/issues/157
ディスカッション
コメント一覧
まだ、コメントがありません