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条目。 您可能需要调整以适应您的需求。