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コマンドを使用しないようにしたいと思います。ここで何が起こっているのか知っている人はいますか?
答え1
AFAIK、dockerは画像の一部のファイルを上書きします。ここに行く、Dockerfileに追加された場合も同様です。これには確かに含まれており、/etc/hosts
おそらく同じことが起こります/etc/resolv.conf
。これは明らかにDockerのデフォルトの「内部」ネットワークを正しく構築するために使用されます(したがって、画像は互いに見えますが、ホストは見えません)。とても確信していますこれらのファイルの一部を上書きまたは変更するには、実行時タスクの一部(この行の一部など)でCMD
実行する必要があると思います。たとえば、
...
ADD resolv.conf /etc/resolv.conf.override
CMD cp /etc/resolv.conf.override /etc/resolv.conf && \
your_old_commands...
答え2
ご覧のとおり、user-defined networks
Dockerエンジンのバージョン> = 1.10を使用しています。したがって、公式ドッカーエンジンのドキュメントからEmbedded DNS server in user-defined networks
:
これらの --dns IP アドレスは組み込み DNS サーバーによって管理され、コンテナの /etc/resolv.conf ファイルでは更新されません。
あなたのDNSは機能するはずですが、どの設定ファイルにも表示されません。
引用する。
答え3
Azure にコンテナ化された Web アプリケーションの場合、この問題を解決しました。
持つコンテナコンパニオン2個。クドゥとマスター
スピード
1. dockerファイルからsshをインストールする(sshd設定も含む)
2. Containerstart.shを作成します(resolv.confを更新します)。
3.そこにエントリポイントを設定してください
これでホスト resolv.conf が更新され、必要な DNS を使用できるようになりました。
PS:ネットワークからカスタムDNSを取得できない場合でも心配しないでください。私たちも同じです。 ASE環境を使用している場合は、リセットが必要な場合があります。