#docker #environment-variables #dockerfile
#docker #переменные среды #dockerfile
Вопрос:
У меня есть аналогичная команда для создания контейнера:
docker create --name=myname
--publish "80:80"
--hostname myhostname
local/local
И хотел бы использовать имя хоста для создания виртуального хоста для веб-сервера.
Я попытался использовать тестовую команду:
RUN touch ~/aaa-${HOSTNAME}
но получил результат: aaa-719d8d68f3dc
но ожидаемый aaa-myhostname
.
Таким образом, он использует промежуточную переменную среды контейнера вместо переданной.
Комментарии:
1. что такое local / local, то есть на каком образе основан ваш контейнер?
2. @cantSleepNow, да, это изображение.
3. 🙂 конечно, но какой, ubuntu base? Fedora? что-то
4. @cantSleepNow, ах, это основано на CentOS 7. 🙂
5. как насчет
cat /etc/hostname
?
Ответ №1:
Параметр —hostname задает имя хоста контейнера, но не как переменную среды.
Используйте -e hostname=my.host.name
вместо —hostname, если вы хотите, чтобы оно было доступно как переменная среды.
Ответ №2:
Все, что в RUN
инструкции, происходит внутри промежуточного контейнера, поэтому, если вы создаете состояние, которое зависит от информации о хосте, на уровне изображения сохраняется информация о промежуточном контейнере.
Все, что зависит от каждого контейнера, должно выполняться в CMD
or ENTRYPOINT
, поэтому оно будет выполняться при запуске контейнера. В качестве точки входа у вас может быть скрипт начальной загрузки, который настраивает состояние хоста, а затем запускает процесс вашего приложения.