Подтвердить что ты не робот

Можем ли мы передавать переменные ENV через линию cmd при построении изображения докеров через файл докеров?

Я работаю над задачей, связанной с построением образа докеров с centOs в качестве базы с помощью Dockerfile. Один из шагов внутри файла docker необходимо установить http_proxy и https_proxy переменные ENV для работы за прокси-сервером.

Поскольку этот файл Docker будет использоваться несколькими командами с разными прокси-серверами, я хочу избежать необходимости редактировать файл Docker для каждой команды. Вместо этого я ищу решение, которое позволяет мне передавать переменные ENV во время сборки, например,

sudo docker build -e http_proxy = somevalue.

Я не уверен, есть ли опция, которая предоставляет это. Я что-то упускаю?

4b9b3361

Ответ 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"]