Вариант 1: при запуске контейнера
Вы можете использовать скрипт-обертку для создания переменных среды с желаемым наследованием. Вот простой скрипт-обертка
wrapper.sh
#!/bin/bash
# prep your environement variables
export command="echo Hello $var_env"
# run your actual command
echo "Hello $var_env"
Ваш файл Docker должен быть адаптирован для его использования
FROM ubuntu
COPY ./wrapper.sh .
ENV var_env=Tarun
ENV command="echo Hello $var_env"
CMD ["sh","-c","./wrapper.sh"]
Вариант 2: во время сборки
Вы можете заархивировать это, перестроив свой образ с разными аргументами сборки. Позволяет сохранить ваш dockerfile почти таким же:
FROM ubuntu
ARG var_env=Tarun
ENV command="echo Hello $var_env"
CMD ["sh","-c","echo Hello $var_env"]
и запустить
docker build -t test .
, это даст вам изображение по умолчанию, как определено в вашем файле docker, но ваш var_env равенбольше не переменная окружения.
затем мы запускаем
docker build -t test --build-arg var_env="New Env Value" .
, это сделает недействительным кэш-память докера только со строки, в которой вы определили свой аргумент сборки. Поэтому держите ваше определение ARG рядом с тем местом, где оно используется, чтобы максимизировать функциональность кэширования при сборке Docker.
Подробнее об аргументах сборки можно узнать здесь: https://docs.docker.com/engine/reference/commandline/build/