Я хочу передать переменные окружения, которые могут быть прочитаны приложениями, на docker-compose up
.
Как правильно использовать docker-compose up
с различными настройками конфигурации?
Я не хочу использовать конфигурацию .env
& environment:
, так как переменные среды часто меняются, и сохранять токены в файле небезопасно.
docker-compose run -e
работает немного, но теряет много.
Он не отображает порты, определенные в службах docker-compose.yml
.
Также в docker-compose.yml
определены несколько сервисов, и я не хочу использовать depends_on
только потому, что docker-compose up
не работает.
Допустим, я определяю службу в docker-compose.yml
service-a:
build:
context: .
dockerfile: DockerfileA
command: node serviceA.js
В моем serviceA.js
я просто использую переменную окружения:
console.log("This is ", process.env.KEY, "running in service A");
Когда я бегу docker-compose run -e KEY=DockerComposeRun service-a
Я получаю переменную окружения KEY, прочитанную serviceA.js
This is DockerComposeRun running in service A
Однако я мог запустить только один сервис.
Я мог бы использовать environment:
в docker-compose.yml
environment:
- KEY=DockerComposeUp
Но в моем случае использования каждое docker compose будет иметь разные значения переменных среды, что означает, что мне нужно будет редактировать файл каждый раз перед тем, как я создаю docker-compose.
Кроме того, не только один сервис будет использовать одну и ту же переменную среды, .env
даже сделал лучшую работу, но это нежелательно.
Кажется, нет способа сделать то же самое для docker-compose up
Я пытался KEY=DockerComposeUp docker-compose up
,
но я получаю undefined
.
Экспорт также не работает для меня, похоже, они все используют переменную среды для docker-compose.yml
вместо приложений в контейнере