![](/img/trans.png)
[英]How to pass environment variables from docker-compose into the NodeJS project?
[英]How to pass environment variables to docker-compose's applications
我想傳遞由docker-compose up
應用程序可讀的環境變量。
使用docker-compose up
構建不同配置設置的正確方法是什么?
我不想使用.env
和environment:
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.