Как обновить файл /etc/hosts в изображении Docker во время "сборки докеров"
Я хочу обновить файл /etc/hosts
во время сборки docker.
Я добавил строку ниже в файл Docker, но не обновил файл /etc/hosts
и не дал никаких ошибок.
RUN echo "192.168.33.11 mynginx" >> /etc/hosts
Мне нужно обновить /etc/hosts
. Может ли кто-нибудь предложить на это?
Ответы
Ответ 1
В более поздней версии docker это можно сделать с помощью docker-compose и его директивы extra_hosts
Добавьте сопоставления имени хоста.
Используйте те же значения, что и в параметре docker run
client --add-host
(который уже должен быть доступен для docker 1.8).
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
Вкратце: изменяйте /etc/hosts
вашего контейнера при его запуске, а не при его сборке.
С Docker 17. x+ у вас есть docker build --add-host
упомянутая ниже, но, как прокомментировано в выпуске 34078 и в этом ответе:
Функция --add-host
во время сборки предназначена для переопределения хоста во время сборки, но не для сохранения этой конфигурации в образе.
Упомянутые решения ссылаются на docker-compose, которую я предлагал выше:
- Запустите внутренний DNS; вы можете установить DNS-сервер по умолчанию для использования в демоне; таким образом, каждый запущенный контейнер будет автоматически использовать настроенный DNS по умолчанию
- Используйте docker compose и предоставьте
docker-compose.yml
своим разработчикам.
Файл компоновки Docker позволяет вам указать все параметры, которые следует использовать при запуске контейнера, чтобы разработчики могли просто составить Docker, чтобы запустить контейнер со всеми параметрами, которые им нужно установить.
Ответ 2
Вы не можете изменить файл хоста в образе, используя echo
на шаге RUN
потому что демон docker будет поддерживать файл (/etc/hosts) и его содержимое (запись hosts) при запуске контейнера из образа.
Однако для достижения того же самого можно использовать следующее:
ENTRYPOINT ["/bin/sh", "-c" , "echo 192.168.254.10 database-server >> /etc/hosts && echo 192.168.239.62 redis-ms-server >> /etc/hosts && exec java -jar ./botblocker.jar " ]
Ключевым моментом здесь является использование команды exec
как предполагает докерская документация. Использование exec сделает команду java PID 1 для контейнера. Docker прерывания будут только отвечать на это.
См. Https://docs.docker.com/engine/reference/builder/#entrypoint
Ответ 3
Я думаю, что docker недавно добавил флаг --add-host
к сборке --add-host
что действительно здорово.
[Править] Так что эта функция была обновлена 17.04.0-й
Для получения более подробной информации о том, как использовать docker build
--add-host
флагом --add-host
посетите: https://docs.docker.com/edge/engine/reference/commandline/build/
Ответ 4
Так как это все еще появляется в качестве первого ответа в Google, я внесу возможное решение.
Команда, взятая отсюда, на удивление сработала (Docker 1.13.1, Ubuntu 16.04):
docker exec -u 0 <container-name> /bin/sh -c "echo '<ip> <name> >> /etc/hosts"
Ответ 5
Если это кому-нибудь HOSTALIASES
переменная HOSTALIASES
env работает для меня:
echo "fakehost realhost" > /etc/host.aliases
export HOSTALIASES=/etc/host.aliases
Ответ 6
Я использую AWS Elasticbeanstalk + Docker + Supervisord.
Быстрый ответ
Просто добавьте немного кода в Dockerfile
.
CMD echo 123.123.123.123 this_is_my.host >> /etc/hosts; supervisord -n;
Ответ 7
Вы можете сделать с помощью следующей команды во время запуска Docker
docker run [OPTIONS] <your-image-name>:<your tag> --add-host example.com:127.0.0.1
Здесь я отображаю example.com
на localhost 127.0.0.1
и он работает.
Ответ 8
Tis is me Dockefile
FROM XXXXX
ENV DNS_1="10.0.0.1 TEST1.COM"
ENV DNS_1="10.0.0.1 TEST2.COM"
CMD ["bash","change_hosts.sh"]'
#cat change_hosts.sh
su - root -c "env | grep DNS | akw -F "=" '{print $2}' >> /etc/hosts"
- Информация
- пользователь должен su
Ответ 9
После этого я работал, монтируя файл во время запуска docker вместо сборки docker
docker service create --name <name> --mount type=bind,source=/etc/hosts,dst=/etc/hosts <image>
Ответ 10
Просто быстрый ответ для запуска вашего контейнера, используя:
docker exec -it <container name> /bin/bash
после открытия контейнера:
cd ..
затем
`cd etc`
а затем вы можете
cat hosts
или
apt-get update
apt-get vim
или любой редактор, который вам нравится, и откройте его в vim, здесь вы можете изменить свой startup ip до 0.0.0.0