无法通过RUN从Dockerfile写入/ etc / hosts文件


9

我正在使用一个非常简单的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页面中,无论是打开还是关闭,似乎都有很多问题。

Answers:


12

这适用于docker 1.7.0

RUN echo "192.168.11.112 myhost" >> /etc/hosts && wget http://myhost

技巧是将主机名添加到与使用该主机名相同的行上,否则主机文件将被重置,因为每个RUN命令都会启动一个新的中间容器。例如,这将不起作用

RUN echo "192.168.11.112 myhost" >> /etc/hosts
RUN wget http://myhost

1
感谢您的见解!尽管正确(我检查过)并且总体上很有用,但是在这种情况下,对我而言并没有真正的用处。我需要在容器运行时填充“主机”文件。
dlyk1988

2
+1用于在同一行上运行命令
myol 2016年

7

在写完我的问题的更新后,我决定再仔细看一下在github中打开的“问题”。事实证明,已实现一种解决方法:

docker run ... --add-host='server:0.0.0.0' ...

启动容器时使用“ --add-host ...”参数,可以修改hosts文件。


5
我希望能够在构建中做到这一点。运行容器的人员不必了解内部主机。零意义!
samsamm777

我回声@ samsamm777。想知道是否有一个好的方法吗?
乔纳森

这确实是非常令人惊讶的行为,在IT系统中从来都不是一个好主意。
Torsten Bronger '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.