Как использовать имя хоста, переданное в качестве аргумента в Dockerfile?

#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 , поэтому оно будет выполняться при запуске контейнера. В качестве точки входа у вас может быть скрипт начальной загрузки, который настраивает состояние хоста, а затем запускает процесс вашего приложения.