我想将我的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。所以从官方 docker 引擎文档来看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 环境,可能需要重新设置