我有一个运行指令修改/ etc / hosts文件的Dockerfile,但它不起作用。
FROM dockerhub.mydomain.com/sometag/java8 MAINTAINER itsme ADD some-java-app.jar app.jar ADD hosts tmp/ ENV PATH=/opt/java/bin:$PATH RUN cat /tmp/hosts >> /etc/hosts CMD ["java",\ "-Djava.security.egd=file:/dev/./urandom",\ "-jar",\ "/app.jar"]
在复制到docker映像中的/ tmp的hosts文件中,还有其他主机名和IP。 我想cat /tmp/hosts到/etc/hosts但build立镜像/etc/hosts未修改。
如何正确修改这个文件? 编辑:我试图使用tee命令,但图像时生成/tmp/hosts被回显到控制台,而不是/etc/hosts 。
RUN bash -c 'cat /tmp/hosts | tee -a /etc/hosts'
它看起来像| 或>>在Dockerfile中不起作用。
Docker在容器启动时创build/etc/hosts文件。 这就是为什么我的/etc/hosts文件的修改被覆盖。 我可以通过CMD命令dynamic更改主机文件。
FROM dockerhub.mydomain.com/sometag/java8 MAINTAINER itsme ADD some-java-app.jar app.jar ADD hosts tmp/ ENV PATH=/opt/java/bin:$PATH CMD cat /tmp/hosts >> /etc/hosts; java -Djava.security.egd=file:/dev/./urandom -jar /app.jar; cat /etc/hosts
最后的命令显示CMD行中第一个命令所做的更改。
我想如果你想导入一个文件,你应该使用copyfunction,而不是add – 如果你从一个URL获取或导入一个档案。
docker工人给出了这个例子:
COPY requirements.txt /tmp/ RUN pip install --requirement /tmp/requirements.txt COPY . /tmp/
所以在你的例子中,这应该工作
COPY hosts /tmp/ ENV PATH=/opt/java/bin:$PATH RUN cat /tmp/hosts >> /etc/hosts