Как передать переменные окружения в приложения docker-compose - PullRequest
0 голосов
/ 25 января 2019

Я хочу передать переменные окружения, которые могут быть прочитаны приложениями, на 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 вместо приложений в контейнере

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Для безопасной передачи конфиденциальных данных конфигурации в ваши контейнеры вы можете использовать Секреты Docker . Все, что проходило через Секреты, шифруется

Вы можете создавать секреты и управлять ими, используя следующие команды:

docker secret create
docker secret inspect
docker secret ls
docker secret rm

И используйте их в своем файле docker-compose, либо ссылаясь на существующие секреты (внешние), либо используйте файл:

secrets:
  my_first_secret:
    file: ./secret_data
  my_second_secret:
    external: true
0 голосов
/ 25 января 2019

Вы можете использовать такую ​​среду:

    service-a:
        build:
          context: .
          dockerfile: DockerfileA
        command: node serviceA.js
        environment:
            KEY=DockerComposeRun

См .: https://docs.docker.com/compose/environment-variables/

...