如何在正在运行的Docker容器中编辑/etc/hosts文件

10
我正在开发一个需要将一些配置存储在docker容器的/etc/hosts文件中的应用程序。我尝试了许多选项,但没有找到正确的在运行时修改/etc/hosts文件的方法。我希望能通过Dockerfile或Java代码来实现。我能够构建docker镜像并手动修改/etc/hosts文件,但不幸的是这并不符合我们项目的要求。

将此更改放入Dockerfile中会修改镜像,而不是正在运行的容器。您是要修改容器内部运行的命令还是主机系统上的/etc/host? - BMitch
如果可能的话,是的。我也尝试过使用升级版的Docker来完成这个任务。在其中,有一个名为CreateContainerCmd的类,包含一个名为withExtraHosts(String ...hosts)的函数,但是那也没有起作用。 - Vinay Pandey
3个回答

10

这取决于您想要进行什么样的修改。如果您只需要添加更多主机,您可能可以在docker run命令中完成,例如 -

docker run --add-host="localA:127.0.0.1" --add-host="localB:172.0.0.1" ....

这个链接也可能很有用:- https://github.com/docker/docker/issues/10324


8
建议的解决方案是使用--add-host选项来运行docker run,或者如果使用docker-compose,则在docker-compose.yml文件中使用相应的选项。
但是,我和你一样遇到了同样的问题。我有一个修改hosts文件的脚本,我想在容器中运行它。所以我将脚本COPY到容器中并使其可执行,在Dockerfile的CMD脚本中调用您的脚本来修改hosts文件。

操作方法

Dockerfile中:

# add the modifyHostsFile script, make it executable
COPY ./bash-scripts/modifyHostsFile.sh /home/user/modifyHostsFile.sh
RUN sudo chmod +x /home/user/modifyHostsFile.sh


# run the script that starts services
CMD ["/bin/bash", "/home/user/run.sh"]

run.sh脚本中,我执行该脚本以修改主机文件。

# modify the hosts file
bash ./modifyHostsFile.sh

无法工作

在Dockerfile中

# add the modifyHostsFile script, make it executable
COPY ./bash-scripts/modifyHostsFile.sh /home/user/modifyHostsFile.sh
RUN sudo chmod +x /home/user/modifyHostsFile.sh

# modify the hosts file right now
RUN bash /home/user/modifyHostsFile.sh    

# run the script that starts services
CMD ["/bin/bash", "/home/user/run.sh"]

在您的CMD脚本期间,您必须运行修改主机文件的脚本。如果您在Dockerfile中通过RUN bash ./modifyHostsFile.sh运行它,它将添加到该容器中,但是然后Docker将继续执行Dockerfile中的下一步并创建一个新容器(它为Dockerfile中的每个步骤创建一个新的中间容器),而您对/etc/hosts的更改将被覆盖。


1

我曾经遇到过同样的问题,并通过viex模式克服了它。

ex -sc '%s/foo/bar/g|x' /etc/hosts


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接