Как изменить Docker ENV var?
при строительстве Dockerfile
, Я часто разрешаю настраивать аргументы во время сборки, чтобы упростить настройку только немного разных контейнеров. Для этого я использую значения по умолчанию для ENV
vars в сочетании с определяемым пользователем ARG
s. Пример Dockerfile
для быстрого тестирования с:
FROM busybox
ARG FLAGS
ENV FLAGS ${FLAGS:-}
RUN echo "${FLAGS}"
это тогда можно использовать так:
docker build --build-arg FLAGS="foo --remove-me" -t <imagename>:<tag> .
теперь я нахожусь в ситуации, когда я хочу активно удалить определенный флаг (в приведенном выше примере: --remove-me
) из команды, которую я разрешаю запускать (из-за ошибки, не исправленной более года). Хотя я знаю, как удалить флаг в других ситуациях:
LC_ALL=C sed -e 's/ --remove-me//'
я сталкиваюсь с проблемой, что я понятия не имею, как трубить и удалять флаг. Я знаю, что могу сделать это при использовании RUN
, но тогда мне придется повторить выше sed
использование для каждого RUN
заявление, поэтому и не повторимый.
2 ответов
после прочтения о замене переменной Shell в этой AskUbuntu ответ, я попробовал:
ENV FLAGS ${FLAGS//--fully-static/}
однако я столкнулся со следующей ошибкой:
Missing ':' in substitution: "${FLAGS:-}" | "${FLAGS//--fully-static/}"
сначала я узнал, что Docker поддерживает только ограниченный бит bash методы замены переменных. Наконец, я смог найти на Докер GitHub РЕПО где ясно, что :
должны быть там, где активно убивает любые усилия, идущие по этому пути прямо на первом этапе.
выполнить в той же проблеме. Мой обходной путь:
используйте login shell для чтения .профиль:
# need docker >= 1.12
SHELL ["bash", "--login", "-c"]
создать новую переменную среды с подстановкой:
RUN echo "export PROXY_HOST_IP=${PROXY_HOST#"http://"}" >> ${HOME}/.profile