CentOSサーバ上DockerコンテナでDNS解決されない時は

  • 12 May 2019
Post image

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

(別ブログからの移行記事)

You May Also Like

WindowsでもMacのUS配列キーボードが最強なわけ

WindowsでもMacのUS配列キーボードが最強なわけ

 コードを書く人間なら、キーボードにこだわりたくなるものだ。ノートPCをメインにしている場合はキーボードを変えることは難しいが、それでもJIS配列かUS配列など一度は考えたことがあるはずだ。 このサイトで何度も書いている通り、プログラミングのほとんどは試行錯誤の繰り返しで作り上げてい …

NYM-Mixnetによる誰にも傍受されないプライバシー通信を試してみた

NYM-Mixnetによる誰にも傍受されないプライバシー通信を試してみた

 さて、NYMというプロジェクトをご存じだろうか?2022年4月現在、おそらくほぼすべてのインフラエンジニアやネットワークエンジニアがNYMを知らないだろう。一方で仮想通貨トレーダでこのページたどり着いたひともいるだろう。この記事ではNYMへの投資のお話は一切しないのでご注意いただきたい。エンジニア …