10

I have a Dockerfile with RUN instruction to modify /etc/hosts file but it doesn't work.

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"]

In hosts file that is copied to /tmp in docker image there is a additional hosts names and IPs. I want to cat that /tmp/hosts to /etc/hosts but after building image /etc/hosts is unmodified.

How to modify this file properly? EDIT: I'm trying to use tee command but while image is build contents of /tmp/hosts is echoed to console, not to /etc/hosts.

RUN bash -c 'cat /tmp/hosts | tee -a /etc/hosts'

It looks like | or >> doesn't work in Dockerfile.

2 Answers 2

10

Docker creates /etc/hosts file while container is started. That's why my modifications of /etc/hosts file are overwritten. I can change hosts file dynamically, via CMD command.

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

Last commands shows changes made by first command in CMD row.

1

I think if you want to import a file you should use the copy function and not add - add if you are getting from a URL or importing an archive.

docker gives this as an example:

COPY requirements.txt /tmp/
RUN pip install --requirement /tmp/requirements.txt
COPY . /tmp/

so in your example, this should work

COPY hosts /tmp/
ENV PATH=/opt/java/bin:$PATH
RUN cat /tmp/hosts >> /etc/hosts
8
  • But hosts file is added to image. Problem is in adding new content to /etc/hosts file.
    – QkiZ
    May 19, 2016 at 9:42
  • so the host file is in /tmp but is not appended to /etc/hosts, or, you are trying to overwrite file 'host' in /tmp ?
    – Sum1sAdmin
    May 19, 2016 at 9:47
  • I'm trying to append content.
    – QkiZ
    May 19, 2016 at 9:48
  • yes that's understood, but which part is not working, the copy or the append?
    – Sum1sAdmin
    May 19, 2016 at 9:49
  • Like I said before cat /tmp/hosts >> /etc/hosts not append contents of /tmp/hosts to /etc/hosts.
    – QkiZ
    May 19, 2016 at 9:56

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .