簡體   English   中英

如何將環境變量傳遞給docker-compose的應用程序

[英]How to pass environment variables to docker-compose's applications

我想傳遞由docker-compose up應用程序可讀的環境變量。

使用docker-compose up構建不同配置設置的正確方法是什么?

我不想使用.envenvironment: config,因為環境變量經常變化,並且在文件中保存令牌是不安全的。

docker-compose run -e確實有點工作,但輸了很多。 它不映射docker-compose.yml服務中定義的端口。 docker-compose.yml也定義了多個服務,我不想使用depends_on只是因為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我確實得到了serviceA.js讀取的環境變量KEY

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環境變量而不是容器中的應用程序

你可以使用這樣的環境:

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

請參閱: https//docs.docker.com/compose/environment-variables/

要將敏感配置數據安全地傳遞到容器,您可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM