我有一个简单的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
我使用
构建docker build .
然后使用
测试RUN回波线sudo docker run -t -i <built image ID> /bin/bash
然后我进入容器但未附加/ etc / hosts文件。现在在容器中运行相同的echo ....行具有所需的效果
谁能告诉我我的dockerfile RUN有什么问题......?
答案 0 :(得分:29)
每次创建新容器时,Docker都会动态生成/etc/hosts
。这样它就可以联系其他人。您可以使用--add-host
选项:
docker run --add-host www.domain.com:8.8.8.8 ubuntu ping www.domain.com
答案 1 :(得分:1)
如果您使用docker-compose,请使用extra_hosts:
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
答案 2 :(得分:0)
如果您尝试在主机和容器之间维护hosts文件条目,则另一种方法是使用映射主机的shell脚本包装您的命令&#39; /etc/hosts
进入--add-host
参数:
~/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
会占用您主机前10行之后的所有内容。 /etc/hosts
文件|
删除评论和空白行|
将条目重新排序为--add-host
参数。
在前10行之后获取所有内容的原因是排除主机的localhost和ipv6条目。您可能需要根据自己的需要进行调整。
答案 3 :(得分:0)
我遇到了一个问题,我想为一个IP添加多个域名。实际上,由于在每次运行映像时/ etc / hosts都将被覆盖,因此没有办法进行构建。因此,似乎在docker-compose方法中使用--add-host选项或其extra_hosts外星人是唯一的方法。 但实际上,通过单个--add-host添加每个域名对我来说太麻烦了。我尝试过以下一种方法,它可以工作:
docker run --add-host "some.box.com MyFriendlyBoxName":X.X.X.X ubuntu cat /etc/hosts
实际上,它只是将--add-host之后的String复制并粘贴到冒号。