Можем ли мы передавать переменные ENV через линию cmd при построении изображения докеров через файл докеров?
Я работаю над задачей, связанной с построением образа докеров с centOs в качестве базы с помощью Dockerfile. Один из шагов внутри файла docker необходимо установить http_proxy и https_proxy переменные ENV для работы за прокси-сервером.
Поскольку этот файл Docker будет использоваться несколькими командами с разными прокси-серверами, я хочу избежать необходимости редактировать файл Docker для каждой команды. Вместо этого я ищу решение, которое позволяет мне передавать переменные ENV во время сборки, например,
sudo docker build -e http_proxy = somevalue.
Я не уверен, есть ли опция, которая предоставляет это. Я что-то упускаю?
Ответы
Ответ 1
Контейнеры могут быть построены с использованием build arguments
(в Docker 1.9+), которые работают как переменные среды.
Вот способ:
FROM php:7.0-fpm
ARG APP_ENV=local
ENV APP_ENV ${APP_ENV}
RUN cd /usr/local/etc/php && ln -sf php.ini-${APP_ENV} php.ini
а затем создайте производственный контейнер:
docker build --build-arg APP_ENV=prod .
Для вашей конкретной проблемы:
FROM debian
ENV http_proxy ${http_proxy}
а затем запустите:
docker build --build-arg http_proxy=10.11.24.31 .
Обратите внимание: если вы создадите контейнеры с docker-compose
, вы можете указать эти build-args в файле docker-compose.yml
, но не в командной строке. Однако вы можете использовать замену переменных в файле docker-compose.yml
, который использует переменные среды.
Ответ 2
Я столкнулся с такой же ситуацией.
В соответствии с ответом Sin30 довольно приемлемым решением является оболочка,
CMD ["sh", "-c", "cd /usr/local/etc/php && ln -sf php.ini-$APP_ENV php.ini"]