我正在开发一个需要将一些配置存储在docker容器的/etc/hosts文件中的应用程序。我尝试了许多选项,但没有找到正确的在运行时修改/etc/hosts文件的方法。我希望能通过Dockerfile或Java代码来实现。我能够构建docker镜像并手动修改/etc/hosts文件,但不幸的是这并不符合我们项目的要求。
这取决于您想要进行什么样的修改。如果您只需要添加更多主机,您可能可以在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
--add-host
选项来运行docker run
,或者如果使用docker-compose
,则在docker-compose.yml
文件中使用相应的选项。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
的更改将被覆盖。
我曾经遇到过同样的问题,并通过vi
的ex
模式克服了它。
ex -sc '%s/foo/bar/g|x' /etc/hosts