我正在使用一个非常简单的 Dockerfile 制作 docker 镜像。在 Dockerfile 中我有以下命令:
RUN printf "192.92.13.243 www.hahaha.com \n" >> /etc/hosts
该命令本身似乎没有问题,因为此时图像的创建不会停止。
问题是这样的:运行图像时,应该插入“/etc/hosts”中的行不存在。
现在,我四处搜索,发现在 docker 1.2 版本之前,容器内的 hosts 文件存在问题。就我而言,我使用的是 1.5 版本,这是目前的最新版本。
我是否遗漏了什么?
更新 1:
在 docker 的 github 页面上,似乎存在很多与此相关的问题,有开放的,也有封闭的。
答案1
这适用于 docker 1.7.0
RUN echo "192.168.11.112 myhost" >> /etc/hosts && wget http://myhost
诀窍是在使用主机名时将其添加到同一行,否则 hosts 文件将被重置,因为每个 RUN 命令都会启动一个新的中间容器。例如,这行不通:
RUN echo "192.168.11.112 myhost" >> /etc/hosts
RUN wget http://myhost
答案2
在更新了我的问题后,我决定再仔细看看 github 上打开的“问题”。结果发现,已经实施了一种解决方法:
docker run ... --add-host='server:0.0.0.0' ...
启动容器时使用“--add-host ...”参数可以修改hosts文件。