首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker重写容器中的/etc/ file文件

Docker重写容器中的/etc/ file文件
EN

Unix & Linux用户
提问于 2017-02-27 17:19:38
回答 3查看 44.3K关注 0票数 27

我想将我的resin/rpi-raspbian:jessie容器的/etc/resolv.conf设置为:

代码语言:javascript
复制
nameserver 208.67.222.222
nameserver 208.67.220.220

我的Dockerfile有以下一行:

代码语言:javascript
复制
ADD resolv.conf /etc/resolv.conf

此添加的文件包含正确的名称服务器。

我的码头主机的/etc/resolv.conf包含正确的信息。

我像这样管理集装箱:

代码语言:javascript
复制
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

尽管如此,容器还是提供了以下输出:

代码语言:javascript
复制
root@642b0f4716ba:/# cat /etc/resolv.conf
nameserver 127.0.0.11
options ndots:0

只有在我从容器内部(或使用docker )手动更改resolv.conf之后,它才会看起来正确。

我宁愿避免使用exec命令来修复它。有人知道这是怎么回事吗?

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2017-03-01 14:45:31

当图像启动时,docker会重写图像中的一些文件,即使它们是Dockerfile中的ADDed。这当然包括/etc/hosts,而且很可能/etc/resolv.conf也是如此。这显然是用来正确地构建默认的Docker“内部”网络(这样图像就可以看到对方,而不是主机等等)。如果您确实想重写/修改其中的一些文件,我认为您必须将其作为运行时操作的一部分,即作为CMD行的一部分。例如:

代码语言:javascript
复制
...
ADD resolv.conf /etc/resolv.conf.override
CMD cp /etc/resolv.conf.override /etc/resolv.conf && \
        your_old_commands...
票数 21
EN

Unix & Linux用户

发布于 2017-03-07 14:38:12

如我所见,您正在使用user-defined networks和Docker版本>= 1.10。因此,从有关Embedded DNS server in user-defined networks的正式码头引擎文档来看:

这些--dns IP地址由嵌入式DNS服务器管理,不会在容器的/etc/ file文件中更新。

您的dns必须工作,但您将看不到任何配置文件。

参考文献

票数 6
EN

Unix & Linux用户

发布于 2018-08-31 10:45:13

如果是Azure容器的web应用程序,我已经解决了这个问题。

有两个集装箱,配偶。古都和主人

步骤

1.从您的docker文件安装ssh (还包括sshd配置)

2.创建一个containerstart.sh (更新resolv.conf)

3.在里面设置入口点

现在主机resolv.conf得到更新,您可以使用任何您想要的dns。

如果您不能在网络中选择自定义DNS,请不要担心。我们也不能。如果使用的是ASE环境,则可能需要重新设置。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/347939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档