如何将放置在 .env 文件中的变量传递给 docker swarm 中的容器?

Shō*_*un8 1 environment-variables docker docker-compose docker-swarm docker-stack

我正在尝试对docker -compose和swarm使用相同的 docker-compose.yml和.env文件。变量来自通过在启动时运行 run.sh 脚本,.env文件中应该通过 sed 解析到配置文件中。使用该docker-compose up命令时,此设置工作正常,但当我使用该docker stack deploy命令时,它们没有通过。

如何将变量传递到容器中,以便run.sh脚本在启动时解析它们?

BMi*_*tch 6

加载.env文件是 docker-compose 的一项功能,它不是 docker CLI 的一部分。在执行部署之前,您可以在 shell 中手动加载此文件的内容:

set -a; . ./.env; set +a
docker stack deploy -c docker-compose.yml stack_name
Run Code Online (Sandbox Code Playgroud)

其他选项包括使用 docker-compose 预处理撰写文件:

docker-compose config >docker-compose.processed.yml
Run Code Online (Sandbox Code Playgroud)

或者您可以使用 envsubst 替换变量以使用已经扩展的变量创建一个撰写文件:

set -a; . ./.env; set +a
envsubst <docker-compose.yml >docker-compose.processed.yml
Run Code Online (Sandbox Code Playgroud)

  • @Octavian 第一个选项获取环境并使用 swarm 进行部署。第二个和第三个选项构建一个可以使用 swarm 部署的撰写文件。`docker stack` 是一个 swarm 模式命令,compose yml 文件是该命令的输入。 (2认同)