如何在Docker容器中使root / etc / hosts可写?

时间:2013-10-16 21:48:11

标签: docker

我是使用docker并配置容器的新手 我无法编辑/ etc / hosts(但需要我正在开发的某些软件)。自动编辑(通过sudo或root)文件在只读文件系统上显示它。手动(vim)编辑文件说它是只读的,我无法以root身份保存更改(文件权限是rw for owner(root))。

但我可以修改其他文件并在/ etc。

中添加文件

这有什么理由吗?

我可以更改Docker配置以允许编辑/ etc / hosts吗?

感谢

4 个答案:

答案 0 :(得分:17)

更新 2014-09

见@Thomas回答:

  

/ etc / hosts现在可以从Docker 1.2开始写入。

原始答案

你可以同时使用这个黑客

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

答案 1 :(得分:8)

从Docker 1.2开始,

/etc/hosts现在可写了。

来自Docker的博客:

  

但请注意,在a期间不会保存对这些文件的更改   docker build等不会保留在生成的图像中。该   更改只会“粘贴”在正在运行的容器中。

答案 2 :(得分:4)

目前这是Docker的技术限制,将在https://github.com/dotcloud/docker/issues/2267进一步讨论。

它最终会被解除。

目前,您需要解决此问题,例如:使用自定义dnsmasq服务器。

答案 3 :(得分:0)

我最近偶然发现需要在/etc/hosts文件中添加一个条目(为了让sendmail正常工作)。

我最终将其作为Dockerfile的{​​{1}}声明的一部分,如下所示:

CMD

因此它实际上不是图像的一部分,但在从图像创建容器后始终可用。