9

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

9

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.