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

如何使/etc/hosts在Docker容器中可由root写入?,docker,Docker,我不熟悉使用docker,正在配置容器。 我无法编辑/etc/hosts(但需要为我正在开发的某些软件编辑)。文件的自动编辑(通过sudo或root)表示其位于只读文件系统上。文件的手动(vim)编辑显示其为只读,我无法将更改保存为root(文件权限为rw for owner(root)) 但是,我可以修改其他文件并在/etc中添加文件 这有什么原因吗 我可以更改Docker配置以允许编辑/etc/hosts吗 感谢这是Docker目前的一个技术限制,将在中进一步讨论 它最终将被解除 目前,您需

我不熟悉使用docker,正在配置容器。
我无法编辑/etc/hosts(但需要为我正在开发的某些软件编辑)。文件的自动编辑(通过sudo或root)表示其位于只读文件系统上。文件的手动(vim)编辑显示其为只读,我无法将更改保存为root(文件权限为rw for owner(root))

但是,我可以修改其他文件并在/etc中添加文件

这有什么原因吗

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


感谢

这是Docker目前的一个技术限制,将在中进一步讨论

它最终将被解除

目前,您需要解决这一问题,例如使用定制的
dnsmasq
服务器。

更新2014-09 见@Thomas answer:

/从Docker 1.2开始,etc/hosts现在是可写的

原始答案 你可以同时使用这个黑客

在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

添加您的\u hosts\u文件/tmp/hosts
运行mkdir-p--/lib override&&cp/lib/x86_64-linux-gnu/libnss_files.so.2/lib override
运行perl-pi-e's:/etc/hosts:/tmp/hosts:g'/liboverride/libnss_files.so.2
环境LD_库路径/lib覆盖

/etc/hosts
从Docker 1.2开始现在是可写的

从Docker的博客:

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


我最近偶然发现需要在
/etc/hosts
文件中添加一个条目(以使
sendmail
工作)

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

CMD echo "127.0.0.1 noreply.example.com $(hostname)" >> /etc/hosts \
    && sendmailconfig \
    && cron -f

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

不要采取错误的方法,但是。。。我爱你!只希望我在之前发现了这个黑客——配置dnsmasq真的给了我一些不那么有趣的两个小时。注意,这对于当前的主干版本是正确的,但尚未包含在标记为1.2.0的版本中,该版本目前作为包分发。您链接到的更改日志显示它在1.2中,我可以用我从软件包中安装的Docker 1.2向/etc/hosts写入数据。啊,对不起,我没有看到这是一个两阶段提交。我正在检查命令行上是否存在--addhosts选项,该选项稍后才到达。