У меня возникли проблемы с передачей некоторых параметров среды в docker run
относительно общим образом c.
Нашей первой итерацией была загрузка файла .env
в среду через эти строки :
set -o allexport;
. "${PROJECT_DIR}/.env";
set +o allexport;
А затем вручную введите --env VARNAME=$VARNAME
в качестве параметров для команды docker run
. Но это может быть довольно раздражающим, когда у вас есть десятки переменных.
Затем мы попытались просто передать файл с --env-file .env
, и он , кажется, работает, но это не так потому что он плохо сочетается с кавычками вокруг значений переменных.
Здесь я начал делать сумасшедшие / уродливые вещи. Основная идея c заключалась в том, чтобы сделать что-то вроде:
set_docker_parameters()
{
grep -v '^$' "${PROJECT_DIR}/.env" | while IFS= read -r LINE; do
printf " -e %s" "${LINE}"
done
}
docker run $(set_docker_parameters) --rm image:label command
Где анализируемые строки похожи на VARIABLE="value"
, VARIABLE='value'
или VARIABLE=value
. Пустые строки отбрасываются по каналу grep
.
Но docker run
постоянно жалуется на неправильный вызов. Когда я расширяю результат set_docker_parameters
, я получаю то, что ожидал, и когда я копирую его результат и заменяю $(set_docker_parameters)
, тогда docker run
работает, как и ожидалось, безупречно.
Любая идея о том, что я ' я делаю что-то не так?
Большое спасибо!
PS: Я пытаюсь сделать мой скрипт на 100% POSIX-совместимым, поэтому я предпочту любое решение, которое не зависит от Bash -specifi c функции.