我想将我的resin/rpi-raspbian:jessie容器设置/etc/resolv.conf为:
nameserver 208.67.222.222
nameserver 208.67.220.220
Run Code Online (Sandbox Code Playgroud)
我的 Dockerfile 有以下几行:
ADD resolv.conf /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)
这个添加的文件包含正确的名称服务器。
我的 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
Run Code Online (Sandbox Code Playgroud)
尽管如此,容器还是提供了以下输出:
root@642b0f4716ba:/# cat /etc/resolv.conf
nameserver 127.0.0.11
options ndots:0
Run Code Online (Sandbox Code Playgroud)
只有在我从容器内(或使用 docker exec)手动更改 resolv.conf 后,它才看起来正确。
我宁愿避免使用 exec 命令修复它。有人知道这里发生了什么吗?
aka*_*vel 19
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...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29523 次 |
| 最近记录: |