К сожалению, у вас есть только эта переменная окружения «dev / qa / prod».Однако можно достичь того, чего вы хотите.
Во-первых, вы можете подумать о том, чтобы сконфигурировать конфигурацию, специфичную для вашей среды, в образ для всех сред.( Обычно я бы не рекомендовал делать это! ) Например, вы можете COPY
три файла в ваше изображение:
dev-env.sh
: содержит вашу конфигурацию dev в форме:ELASTICSEARCH_URL=http://elastic-dev:123
qa-env.sh
(аналог) prod-env.sh
(аналог)
Затем выполняется оценка во время выполнения (не во время сборки)в какой среде вы: Вы добавляете скрипт ENTRYPOINT
к своему изображению, который будет источником правильного файла, в зависимости от переменной ENVIRONMENT_NAME
.
Dockerfile (part):
ENTRYPOINT ["docker-entrypoint.sh"]
docker-entrypoint.sh (скопировано в WORKDIR
изображения):
#!/bin/bash
set -e
if [ "$ENVIRONMENT_NAME" = "prod" ]; then
source prod-env.sh
fi
# else if qa ... , else if dev ..., else fail
exec "$@"
Этот сценарий будет запускаться при запуске контейнера Docker, поэтому этот подход не подходит для вас, если вам нужны переменныебыть доступным в инструкциях Dockerfile (во время сборки).
Другой (во время сборки) обходной путь описан здесь и состоит из использования временных файлов для хранения переменных среды в нескольких слоях изображения.