如何将我放在 .env 文件中的变量传递到我的 docker 群中的容器?
How can I pass the variables I have placed in the .env file to the containers in my docker swarm?
我正在尝试为两个docker-compose 和 swarm。 .env 文件中的变量应该通过 sed 在引导时由 运行 和 run.sh 脚本解析到配置文件中。此设置在使用 docker-compose up
命令时工作正常,但当我使用 docker stack deploy
命令时它们没有通过。
如何将变量传递到容器中,以便 run.sh 脚本在启动时解析它们?
加载 .env
文件是 docker-compose 的一项功能,它不是 docker CLI 的一部分。在执行部署之前,您可以在 shell 中手动加载此文件的内容:
set -a; . ./.env; set +a
docker stack deploy -c docker-compose.yml stack_name
其他选项包括使用 docker-compose 预处理撰写文件:
docker-compose config >docker-compose.processed.yml
或者您可以使用 envsubst 替换变量,以使用已展开的变量制作一个 compose 文件:
set -a; . ./.env; set +a
envsubst <docker-compose.yml >docker-compose.processed.yml
实际上我发现 best/easiest 方法是将此参数添加到 docker-compose.yml 文件中:
env_file:
- .env
要将 shell 环境变量传递给容器,请使用 env_file
语法:
web:
env_file:
- web-variables.env
作为docs状态:
You can pass multiple environment variables from an external file through to a service’s containers with the ‘env_file’ option
但是,使用 .env
作为外部文件名可能会导致意外结果并且在语义上存在问题。
将 .env
放置在 docker-compose
命令用于不同目的的文件夹中:
The environment variables you define here are used for variable
substitution in your Compose file
You can set default values for environment variables using a .env
file, which Compose automatically looks for
所以如果撰写文件包含:
db:
image: "postgres:${POSTGRES_VERSION}"
您 .env
将包含:
POSTGRES_VERSION=4.0
此功能确实只在 compose 中有效:
The .env file feature only works when you use the docker-compose up
command and does not work with docker stack deploy
我正在尝试为两个docker-compose 和 swarm。 .env 文件中的变量应该通过 sed 在引导时由 运行 和 run.sh 脚本解析到配置文件中。此设置在使用 docker-compose up
命令时工作正常,但当我使用 docker stack deploy
命令时它们没有通过。
如何将变量传递到容器中,以便 run.sh 脚本在启动时解析它们?
加载 .env
文件是 docker-compose 的一项功能,它不是 docker CLI 的一部分。在执行部署之前,您可以在 shell 中手动加载此文件的内容:
set -a; . ./.env; set +a
docker stack deploy -c docker-compose.yml stack_name
其他选项包括使用 docker-compose 预处理撰写文件:
docker-compose config >docker-compose.processed.yml
或者您可以使用 envsubst 替换变量,以使用已展开的变量制作一个 compose 文件:
set -a; . ./.env; set +a
envsubst <docker-compose.yml >docker-compose.processed.yml
实际上我发现 best/easiest 方法是将此参数添加到 docker-compose.yml 文件中:
env_file:
- .env
要将 shell 环境变量传递给容器,请使用 env_file
语法:
web:
env_file:
- web-variables.env
作为docs状态:
You can pass multiple environment variables from an external file through to a service’s containers with the ‘env_file’ option
但是,使用 .env
作为外部文件名可能会导致意外结果并且在语义上存在问题。
将 .env
放置在 docker-compose
命令用于不同目的的文件夹中:
The environment variables you define here are used for variable substitution in your Compose file
You can set default values for environment variables using a .env file, which Compose automatically looks for
所以如果撰写文件包含:
db:
image: "postgres:${POSTGRES_VERSION}"
您 .env
将包含:
POSTGRES_VERSION=4.0
此功能确实只在 compose 中有效:
The .env file feature only works when you use the docker-compose up command and does not work with docker stack deploy