我是使用 docker 的新手,并且正在配置一个容器。
我无法编辑 /etc/hosts (但需要我正在开发的一些软件)。文件的自动编辑(通过 sudo 或 root)说它在只读文件系统上。文件的手动(vim)编辑说它是只读的,我无法将更改保存为root(文件权限是所有者(root)的rw)。
但是,我可以修改其他文件并在 /etc 中添加文件。
这有什么原因吗?
我可以更改 Docker 配置以允许编辑 /etc/hosts 吗?
谢谢
我是使用 docker 的新手,并且正在配置一个容器。
我无法编辑 /etc/hosts (但需要我正在开发的一些软件)。文件的自动编辑(通过 sudo 或 root)说它在只读文件系统上。文件的手动(vim)编辑说它是只读的,我无法将更改保存为root(文件权限是所有者(root)的rw)。
但是,我可以修改其他文件并在 /etc 中添加文件。
这有什么原因吗?
我可以更改 Docker 配置以允许编辑 /etc/hosts 吗?
谢谢
见@Thomas 回答:
从 Docker 1.2 开始,/etc/hosts 现在是可写的。
您可以同时使用此 hack
https://unix.stackexchange.com/questions/57459/how-can-i-override-the-etc-hosts-file-at-user-level
在您的 Dockerfile 中:
ADD your_hosts_file /tmp/hosts
RUN mkdir -p -- /lib-override && cp /lib/x86_64-linux-gnu/libnss_files.so.2 /lib-override
RUN perl -pi -e 's:/etc/hosts:/tmp/hosts:g' /lib-override/libnss_files.so.2
ENV LD_LIBRARY_PATH /lib-override
/etc/hosts
现在从 Docker 1.2 开始可写。
来自 Docker 的博客:
但是请注意,对这些文件的更改不会在 docker 构建期间保存,因此不会保留在生成的映像中。这些更改只会“粘”在正在运行的容器中。
这是目前 Docker 的技术限制,在https://github.com/dotcloud/docker/issues/2267有进一步讨论。
它最终会被解除。
现在,您需要解决它,例如使用自定义dnsmasq
服务器。
我最近偶然发现还需要在/etc/hosts
文件中添加一个条目(以便sendmail
正常工作)。
我最终将它作为Dockerfile
'sCMD
声明的一部分,如下所示:
CMD echo "127.0.0.1 noreply.example.com $(hostname)" >> /etc/hosts \
&& sendmailconfig \
&& cron -f
所以它实际上不是图像的一部分,但在从图像创建容器后它总是可用的。