Dockerはコンテナー内の/etc/resolv.confファイルをオーバーライドします


17

resin/rpi-raspbian:jessieコンテナを次の/etc/resolv.confように設定したい:

nameserver 208.67.222.222
nameserver 208.67.220.220

Dockerfileには次の行があります。

ADD resolv.conf /etc/resolv.conf

この追加されたファイルには、正しいネームサーバーが含まれています。

私のDockerホスト/etc/resolv.confには正しい情報が含まれています。

私はこのようにコンテナを実行しています:

docker run -itd --cap-add=NET_ADMIN --device /dev/net/tun \
-v /home/pi/share/ovpn:/ovpn \
--privileged --network=internet_disabled --name vpn-client \
--dns=208.67.222.222 \
openvpn-client_nat-gateway /bin/bash

これにもかかわらず、コンテナは次の出力を提供します。

root@642b0f4716ba:/# cat /etc/resolv.conf
nameserver 127.0.0.11
options ndots:0

コンテナ内から(またはdocker execを使用して)resolv.confを手動で変更した後にのみ、正しく表示されます。

むしろ、execコマンドで修正する必要はありません。誰がここで何が起こっているのか考えていますか?


Wikiには、状況を説明できるいくつかのケースが記載されています
ジュリーペレティエ

私の質問と答えを見てください。
ゼイナブアッバシマザール

回答:


14

知る限り、Dockerは、Dockerfileに追加された場合でも、開始時にイメージ内の一部のファイルをオーバーライドします。これには確かにが含まれており/etc/hosts、おそらく同じことが起こり/etc/resolv.confます。これは明らかにあなたがいる場合(イメージがお互いを参照してくださいではなく、ホスト、などそうという)を適切ドッカーのデフォルトの「内部」ネットワークを構築するために使用されて本当に必ずあなたがそれらのファイルの一部を変更/上書きしたい、私はあなたが必要と考えています実行時アクションの一部として、つまりCMD行の一部としてそれを行います。例えば:

...
ADD resolv.conf /etc/resolv.conf.override
CMD cp /etc/resolv.conf.override /etc/resolv.conf && \
        your_old_commands...

3
正解です。/etc/resolv.confコンテナの起動時にホストからコピーされます。
ウィスバッキー

4

ご覧のとおりuser-defined networks、Docker Engineバージョン1.10以上を使用しています。だから公式のドッカーエンジンのドキュメントからEmbedded DNS server in user-defined networks

これらの--dns IPアドレスは組み込みDNSサーバーによって管理され、コンテナの/etc/resolv.confファイルでは更新されません。

DNSは動作する必要がありますが、設定ファイルには表示されません。

参考文献


0

Azureのコンテナー用のWebアプリの場合、この問題を解決しました。

2つのコンテナ合致があります。クドゥとホスト

手順

1. Dockerファイルからsshをインストールします(sshd configも含まれます)

2. containerstart.shを作成します(resolv.confを更新します)

3.そこにエントリポイントを設定します

これで、ホストresolv.confが更新され、必要なDNSを使用できます

PS:ネットワークでカスタムDNSを取得できない場合でも心配する必要はありません。私たちもできませんでした。ASE環境を使用している場合は、リセットする必要がある場合があります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.