Shi*_*Mai 7 environment-variables docker docker-compose
我想传递应用程序可以读取的环境变量docker-compose up。
使用docker-compose up不同配置设置的正确方法是什么?
我不想使用.env& environment:config ,因为环境变量经常变化并且将令牌保存在文件中是不安全的。
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
Run Code Online (Sandbox Code Playgroud)
在 my 中serviceA.js,我只是使用环境变量:
console.log("This is ", process.env.KEY, "running in service A");
Run Code Online (Sandbox Code Playgroud)
当我运行时,docker-compose run -e KEY=DockerComposeRun service-a
我确实得到了 serviceA.js 读取的环境变量 KEY
This is DockerComposeRun running in service A
Run Code Online (Sandbox Code Playgroud)
但是,我只能运行一项服务。
我可以用environment:在docker-compose.yml
environment:
- KEY=DockerComposeUp
Run Code Online (Sandbox Code Playgroud)
但是在我的用例中,每个 docker compose 都会有不同的环境变量值,这意味着我每次都需要在执行 docker-compose 之前编辑文件。
此外,不仅单个服务会使用相同的环境变量,.env甚至做得更好,但这是不可取的。
docker-compose up
我已经尝试过KEY=DockerComposeUp docker-compose up,似乎没有办法做同样的事情,但我得到的是undefined.
导出对我也不起作用,似乎它们都是关于使用环境变量docker-compose.yml而不是容器中的应用程序
小智 4
要将敏感配置数据安全地传递到容器,您可以使用Docker Secret。通过 Secrets 传递的所有内容都是加密的。
您可以使用以下命令创建和管理机密:
docker secret create
docker secret inspect
docker secret ls
docker secret rm
Run Code Online (Sandbox Code Playgroud)
并在 docker-compose 文件中使用它们,引用现有机密(外部)或使用文件:
secrets:
my_first_secret:
file: ./secret_data
my_second_secret:
external: true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5188 次 |
| 最近记录: |