docker运行追加到/ etc /主机在Dockerfile不起作用

我有一个简单的Dockerfile,但第一个RUN命令(将主机IP地址附加到/ etc / hosts)没有任何作用

FROM dockerfile/java RUN sudo echo "XX.XX.XXX.XXX some.box.com MyFriendlyBoxName" >> /etc/hosts ADD ./somejavaapp.jar /tmp/ #CMD java -jar /tmp/somejavaapp.jar EXPOSE 8280 

我build立使用

 docker build . 

然后testing运行使用的RUN回波线

 sudo docker run -t -i <built image ID> /bin/bash 

然后我进入容器,但/ etc / hosts文件没有被追加。 现在在容器中运行相同的echo ….行具有所需的效果

任何人都可以告诉我什么是我的docker文件运行错误…?

每当你创build一个新的容器时,Docker都会dynamic地生成/etc/hosts 。 这样它可以连接其他人。 你可以使用--add-host选项:

 docker run --add-host www.domain.com:8.8.8.8 ubuntu ping www.domain.com 

如果要维护主机和容器之间的主机文件条目,另一种方法是用一个shell脚本封装你的命令,该脚本将主机的/etc/hosts映射到--add-host params:

~/bin/java

 #!/bin/sh ADD_HOSTS=$(tail -n +10 /etc/hosts | egrep -v '(^#|^$)' | sed -r 's/^([a-z0-9\.\:]+)\s+(.+)$/--add-host="\2:\1"/g') eval docker run \ -it \ --rm \ $ADD_HOSTS \ <image> \ java $* return $? 

显然,用你正在做的任何事情来代替java …

说明; ADD_HOSTS将在主机的/etc/hosts文件中的前10行之后执行所有操作 删除评论和空行| 将条目重新sorting为--add-host params。

在前10行之后采取一切的原因是排除主机的localhost和ipv6条目。 您可能需要调整以适应您的需求。