У меня есть файл 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