Docker

Docker 在容器中覆蓋了我的 /etc/resolv.conf 文件

  • January 12, 2020

我想將我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 命令修復它。有人知道這裡發生了什麼嗎?

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

引用自:https://unix.stackexchange.com/questions/347939