Dockerはコンテナ内の/etc/resolv.confファイルを上書きします。

Dockerはコンテナ内の/etc/resolv.confファイルを上書きします。

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...

おすすめ記事