如何在docker撰写up命令中传递环境变量?



我想在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}

相关内容

  • 没有找到相关文章

最新更新