EatSmartシステム部ブログ

ウェブサイトの開発や運営に関する情報です。

Dockerコンテナが利用するDNSを指定する

先日ステージング環境が稼働するサーバの障害が発生したため、再構築を行いました。 以前は複数台に分かれていたものを、リソースに余裕のある1台に集約しました。 構築自体は本番環境と同様にansibleで実行したので、特に問題無く終わりました。

作業が終わり、担当するサービスをリリースするため、ステージング環境へデプロイを行った際に問題が出ました。 デプロイはコンテナ化したJenkinsから行うのですが、デプロイ先のサーバの名前が解決出来ません。 慌ててステージング環境が稼働するサーバでnslookupを行いましたが、問題無く解決出来ます。 そこでJenkinsに入り同様にnslookupを行ったところ、名前が解決出来ませんでした。 他のコンテナがどうなのか調べた限りでは、どうやらalpineをもとに作成したコンテナで同様の現象が発生しました。 このときは、とりあえず/etc/hostsへ記入することでしのぎました。

デプロイはこれで問題無く行うことが出来る用になりましたが、今度はアプリケーションからデータベースへ接続出来ない問題が発生しました。 このアプリケーションもalpineをもとに作成したコンテナで、データベースの名前が解決出来ていませんでした。 サービスで利用するコンテナのイメージを変更する場合、テストを行う必要があります。 このため、コンテナが利用するDNSを指定することにしました。

docs.docker.jp

まずは、起動するときにdnsオプションを指定しました。 実行すると、/etc/resolv.confに期待したサーバが指定されるようになりました。

docs.docker.jp

他のコンテナも同様の設定を反映するため、Dockerの設定を変更することにしました。 この設定は、log-driverを指定するためansibleで設定を行っていました。 そこで、log-driverの指定に加えdnsの指定を追加することにしました。