docker RUN добавить в/etc / hosts в Dockerfile не работает

у меня есть простой файл Dockerfile, но первая команда запуска (добавить 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 .

а затем проверить, работает ли эхо-линия с помощью

sudo docker run -t -i <built image ID> /bin/bash

Я затем в контейнер, но файл /etc/hosts не был добавлен. Работает то же самое Эхо .... линия в то время как теперь в контейнере имеет желаемый эффект

может ли кто-нибудь сказать мне, что не так с моим dockerfile БЕЖАТЬ...?

3 ответов


Docker будет генерировать /etc/hosts динамически при каждом создании нового контейнера. Чтобы она связывала других. Вы можете использовать --add-host:

docker run --add-host www.domain.com:8.8.8.8 ubuntu ping www.domain.com

если вы пытаетесь поддерживать записи файлов хостов между хост-машиной и контейнером, другим способом было бы обернуть вашу команду сценарием оболочки, который отображает ваши хосты' /etc/hosts на --add-host params:

~/bin/java:

#!/bin/sh

ADD_HOSTS=$(tail -n +10 /etc/hosts | egrep -v '(^#|^$)' | sed -r 's/^([a-z0-9\.\:]+)\s+(.+)$/--add-host=":"/g')

eval docker run \
    -it \
    --rm \
    $ADD_HOSTS \
    <image> \
    java $*

return $?

очевидно, замените java тем, что вы пытаетесь сделать...

объяснение; ADD_HOSTS будет принимать все после первых 10 строк в ваших хостов'| удалить комментарии и пустые строки | переупорядочить записи в --add-host params.

причина принятия всего после первых 10 строк заключается в исключении записей localhost и ipv6 для вашей хост-машины. Возможно, вам придется настроить это в соответствии с вашими потребностями.


Если вы используете docker-compose, используйте extra_hosts:

extra_hosts:
  - "somehost:162.242.195.82"
  - "otherhost:50.31.209.229"