我正在开发一个应用程序,它需要将一些配置存储在docker容器的/ etc / hosts文件中。 我尝试了很多选项,但没有找到任何正确的方法在运行时修改/ etc / hosts文件。
我想通过Dockerfile或java代码来实现。 我能够构建docker镜像并手动修改/ etc / hosts文件,但不幸的是,这不是我们的项目要求。
答案 0 :(得分:7)
取决于您想要做什么样的修改。如果您只需要添加更多主机,您可以在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
答案 1 :(得分:4)
如果您正在使用docker-compose,建议的解决方案是使用--add-host
docker run
选项或docker-compose.yml
文件中的等效选项。
但是,我和你在同一条船上。我有一个脚本修改了我想要在容器中运行的hosts文件,所以我做的是COPY
脚本进入容器并使其可执行,然后在Dockerfile中{{1}您选择的脚本,调用您的脚本来修改主机文件
CMD
在# 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
您必须在# 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"]
脚本中运行修改主机文件的脚本。如果你通过Dockerfile中的CMD
运行它,它将被添加到该容器中,但是Docker将继续执行Dockerfile中的下一步并创建一个新容器(它为每个步骤创建一个新的中间容器。 Dockerfile)和您对RUN bash ./modifyHostsFile.sh
的更改将被覆盖。
答案 2 :(得分:0)
我遇到了同样的问题,并在vi
模式下使用ex
克服了这个问题。
ex -sc '%s/foo/bar/g|x' /etc/hosts