Назад | Перейти на главную страницу

Изменить файл hosts в dockerfile

У меня есть файл Dockerfile с инструкцией RUN для изменения файла / etc / hosts, но он не работает.

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

В hosts файл, который копируется в / tmp в образе докера, есть дополнительные имена хостов и IP-адреса. я бы хотел cat который /tmp/hosts к /etc/hosts но после создания образа /etc/hosts не модифицирован.

Как правильно изменить этот файл? РЕДАКТИРОВАТЬ: я пытаюсь использовать tee команда, но пока изображение строит содержимое /tmp/hosts выводится на консоль, а не на /etc/hosts.

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

Это выглядит как | или >> не работает в Dockerfile.

Докер создает /etc/hosts файл, пока контейнер запущен. Вот почему мои модификации /etc/hosts файл перезаписывается. Я могу динамически изменять файл hosts с помощью команды CMD.

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.

Я думаю, что если вы хотите импортировать файл, вы должны использовать copy функция, а не add - добавить, если вы получаете по URL или импортируете архив.

Докер приводит это в качестве примера:

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