Я хочу обновить свой /etc/hosts
файл во время «сборки докеров».
Я добавил строку ниже в Dockerfile, но она не обновляет /etc/hosts
файл и не дает никаких ошибок.
RUN echo "192.168.33.11 mynginx" >> /etc/hosts
Мне нужно обновить /etc/hosts
. Кто-нибудь может предложить по этому поводу?
docker
dockerfile
hosts
Пракаш
источник
источник
Ответы:
В более новой версии docker это можно сделать с помощью docker-compose и его
extra_hosts
директивыВкратце: модифицируйте
/etc/hosts
ваш контейнер при его запуске, а не строите его.С Docker 17.x + у вас есть
docker build --add-host
упомянутое ниже , но, как прокомментировано в проблеме 34078 и в этом ответе :Упомянутые решения действительно относятся к docker-compose, который я предлагал выше:
источник
docket exec -it <container name> /bin/bash
, а затем обновить хост контейнера докера в / ect / host с помощью предпочитаемого редактора командной строки (vim, emacs, nano, echo ''. >> />).Вы не можете изменить файл хоста в изображении , используя
echo
вRUN
шаге , потому что Докер демон будет поддерживать файл (/ и т.д. / хосты) и его содержание (запись хостов) при запуске контейнера с картинки.Однако для достижения того же можно использовать следующее:
Ключевым моментом здесь является использование
exec
команды, как предлагает документация докеров. Использование exec сделает команду java как PID 1 для контейнера. Прерывания Docker будут реагировать только на это.См. Https://docs.docker.com/engine/reference/builder/#entrypoint
источник
ENTRYPOINT
это не инструкция по изображению. Он отмечает точку входа только тогда, когда мы запускаем контейнер из этого образа, что означает, что запись hosts существует только после запуска контейнера. Я не считаю это требование существенным. Должно быть какое-то недоразумение.Я думаю, что докер недавно добавил
--add-host
флаг в сборку докеров, и это действительно здорово.[Edit] Итак, эта функция была обновлена 17.04.0-ce
Для получения дополнительной информации о том, как использовать
docker build
с--add-host
флагом, посетите: https://docs.docker.com/edge/engine/reference/commandline/build/источник
--add-host
функция доступна в Docker 12 в CentOS.Поскольку это все еще является первым ответом в Google, я предлагаю возможное решение.
Команда, взятая отсюда, неожиданно сработала для меня (Docker 1.13.1, Ubuntu 16.04):
источник
Если это полезно для кого-то, у
HOSTALIASES
меня сработала переменная env:источник
Вы можете сделать это с помощью следующей команды во время запуска докера
docker run [OPTIONS] --add-host example.com:127.0.0.1 <your-image-name>:<your tag>
Здесь я сопоставляю
example.com
localhost127.0.0.1
и его работу.источник
Я использую AWS Elasticbeanstalk + Docker + Supervisord.
Быстрый ответ
Просто добавьте код
Dockerfile
.источник
Полный ответ
hosts
файл, который вы хотите добавить в контейнер докера;hosts
файл в контейнер, добавив следующую строку вDockerfile
ENTRYPOINT
orCMD
orCRON
job, включите в него следующую командную строку или, по крайней мере, запустите ее внутри работающего контейнера:Dockerfile
потому что модификация будет потеряна:источник
Вы можете использовать --add-host во время запуска докера.
В вашем случае используйте: docker run --add-host mynginx: 192.168.33.11 [image_name]: [tag]
Это обновит ваш / etc / hosts
вы можете проверить это, используя следующие команды:
если sh не работает, вы можете попробовать bash или / bin / sh или / bin / bash
источник
источник
Следующее сработало для меня, установив файл во время запуска докера вместо сборки докера
источник
Просто быстрый ответ для запуска вашего контейнера, используя:
как только контейнер открыт:
затем
и тогда вы можете
или:
или любого другого редактора, который вам нравится, и откройте его в vim, здесь вы можете изменить, скажем, свой стартовый ip на 0.0.0.0
источник