docker RUN присоединяется к /etc/hosts в Dockerfile, не работает
У меня есть простой файл Docker, но первая команда RUN (для добавления IP-адреса хоста в /etc/hosts) не имеет никакого эффекта
FROM dockerfile/java
RUN sudo echo "XX.XX.XXX.XXX some.box.com MyFriendlyBoxName" >> /etc/hosts
ADD ./somejavaapp.jar /tmp/
#CMD java -jar /tmp/somejavaapp.jar
EXPOSE 8280
Я использую
docker build .
а затем проверить, что эхо-строка RUN работает с использованием
sudo docker run -t -i <built image ID> /bin/bash
Я попал в контейнер, но файл /etc/hosts не был добавлен. Выполнение того же эха.... строка, пока в контейнере имеет желаемый эффект
Может ли кто-нибудь сказать мне, что не так с моим файлом dockerfile RUN...?
Ответы
Ответ 1
Docker будет генерировать /etc/hosts
динамически каждый раз, когда вы создаете новый контейнер. Так что это может связать других. Вы можете использовать опцию --add-host
:
docker run --add-host www.domain.com:8.8.8.8 ubuntu ping www.domain.com
Ответ 2
Если вы используете docker-compose, используйте extra_hosts:
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
Ответ 3
Если вы пытаетесь сохранить записи файлов хостов между хост-машиной и контейнером, другой способ заключается в том, чтобы обернуть вашу команду сценарием оболочки, который отображает хосты /etc/hosts
в параметры --add-host
:
~/bin/java
:
#!/bin/sh
ADD_HOSTS=$(tail -n +10 /etc/hosts | egrep -v '(^#|^$)' | sed -r 's/^([a-z0-9\.\:]+)\s+(.+)$/--add-host="\2:\1"/g')
eval docker run \
-it \
--rm \
$ADD_HOSTS \
<image> \
java $*
return $?
Очевидно, замените java тем, что вы пытаетесь сделать...
Объяснение; ADD_HOSTS
займет все после первых 10 строк в /etc/hosts
|
удалить комментарии и пустые строки |
--add-host
записи в параметры --add-host
.
Причиной принятия всего после первых 10 строк является исключение записей localhost и ipv6 для вашей главной машины. Возможно, вам придется настроить это в соответствии с вашими потребностями.