我如何使/ etc / hosts在一个Docker容器中可被root用户写入?
我是新来的使用docker,并configuration一个容器。
我无法编辑/ etc / hosts(但需要一些我正在开发的软件)。 文件自动编辑(通过sudo或root)在只读文件系统上。 手动(VIM)文件的编辑说它是只读的,我无法保存更改作为根(文件权限rw为所有者(根))。
我可以修改其他文件并在/ etc中添加文件。
这有什么理由吗?
我可以更改Dockerconfiguration以允许编辑/ etc / hosts吗?
谢谢
更新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
/etc/hosts
现在可以从Docker 1.2开始写入。
从Docker的博客:
但是,请注意,在Docker构build过程中不会保存对这些文件所做的更改,所以不会保留在生成的图像中。 所做的更改只会“粘”在正在运行的容器中。
这是目前Docker的一个技术限制,并在https://github.com/dotcloud/docker/issues/2267进一步讨论。
它最终将被解除。
现在,您需要解决它,例如通过使用自定义的dnsmasq
服务器。
我最近偶然发现需要在/etc/hosts
文件中添加一个条目(为了使sendmail
正常工作)。
我最终把它作为Dockerfile
的CMD
声明的一部分,如下所示:
CMD echo "127.0.0.1 noreply.example.com $(hostname)" >> /etc/hosts \ && sendmailconfig \ && cron -f
所以它实际上不是图像的一部分,但从图像创build容器后始终可用。
- 在macOS上增加Docker Images的默认磁盘空间
- 如何将ARG传递给docker-compose.yml中的Dockerfile
- web_1 | /docker-entrypoint.sh:第99行:exec:bundle:未findapp_web_1用代码127退出
- 部署在docketed容器中后,http://0.0.0.0:8080上没有显示Mule项目
- 使用dockerfile构build图像
- 如何使用docker在asp.net内核中创buildangular度4应用程序设置的图像
- Docker只保存非公共层
- npm安装在Docker中不起作用
- 如何告诉部署到群集中的随机机器上的Docker容器在自己的主机上使用DNS?