我想在docker compose up
命令中传递一个环境变量,但据我所知,只有docker compose run
命令才有可能像官方文档中提到的那样:
使用docker compose run——env设置环境变量
与docker run——env类似,您可以使用docker compose run——env或其简写形式docker compose run -e:
在一次性容器中设置环境变量
docker compose run -e DEBUG=1 web python console.py
我正在尝试将Spring Cloud Vault集成到Spring Boot应用程序中,并且需要在不使用k8等的情况下保持Vault的令牌安全。为此,在运行应用程序时,我可以传递环境变量(vault_token变量),但是在运行docker compose时也需要传递这些变量,如下所示:
docker compose up -e vault_token=00000000-0000-0000-0000-000000000000 --build
那么,我怎么做呢?请注意,出于安全原因,我不想从.env
文件中读取,只是在运行命令时传递。
docker-compose.yml:
version: '3.8'
services:
vault:
container_name: vault
image: vault
restart: always
environment:
VAULT_DEV_LISTEN_ADDRESS: '0.0.0.0:8200'
# VAULT_DEV_ROOT_TOKEN_ID: 00000000-0000-0000-0000-000000000000
VAULT_DEV_ROOT_TOKEN_ID: ${vault_token}
ports:
- '8200:8200'
volumes:
- ./volumes/logs:/vault/logs
- ./volumes/file:/vault/file
- ./volumes/config:/vault/config
cap_add:
- IPC_LOCK
注意:我使用Windows 11
出于安全考虑,在运行命令时仅通过
这会把你的令牌放在你的shell历史记录中,这不应该被认为是安全的…因此,为什么首选.env
文件。
但是你也可以使用插值。
env:
- MY_VARIABLE
或
env:
MY_VARIABLE: ${MY_VARIABLE}
MY_VARIABLE=foobar docker compose up
或(假设linux)
export MY_VARIABLE=foobar
docker compose up
但是,请注意,这些也将您的令牌公开为终端历史记录中的明文。为了解决这个问题,您可以将source
放在一个外部文件中,或者将docker compose up
封装在一个脚本中。
如果你要使用Kubernetes,然而(甚至,Nomad),那么Vault秘密可以作为直接环境变量挂载到容器,因此你的代码不需要直接使用Vault API,根本,因此不需要令牌。
var 环境";会话,将在容器内部使用。如果你需要在容器内设置变量,这是可以的。
要在docker组合部署容器时使用system变量,只需调用它:
定义环境变量vault_token在系统中(Linux):
export vault_token="Token12345"
获取docker组合文件中的变量,例如命令会话:
command: server -dev -dev-root-token-id=${vault_token}