Docker Swarm 将图像版本外部化到 .env 文件
Docker Swarm with image versions externalized to .env file
我曾经将我的图像版本外部化到我的 .env 文件中。这使得维护变得容易,我不会仅仅为了升级版本而修改我的 docker-compose.yml
文件,所以我确定我不会错误地删除一行。
但是当我尝试使用 stack
将我的服务部署到 swarm
时,docker 引擎抱怨我的图像不正确 reposity/tag以下消息:
Error response from daemon: rpc error: code = 3 desc = ContainerSpec: "GROUP/IMAGE:" is not a valid repository/tag
要解决这个问题,我可以直接在 docker-compose.yml
文件中修复图像版本。这里有任何逻辑还是错误?但这混合了 docker-compose 和可变部分的固定部分。
干杯,
奥利维尔
答案很简单:这不是错误,也不是功能。 .env
当前不受 docker stack
支持。
您必须在 运行 docker stack ...
之前手动获取 .env
运行 export $(cat .env)
DockerGithub 中存在讨论此需求的问题。
https://github.com/docker/docker.github.io/issues/3654
另一个讨论问题和解决方案:https://github.com/moby/moby/issues/29133#issuecomment-285980447
docker stack deploy
中的 yaml 解析器不具有 docker-compose
中的所有相同功能。但是,在完成所有变量替换、扩展其他文件以及将多个文件合并在一起之后,您可以使用 docker-compose config
输出一个 yaml 文件。这有效地将 docker-compose
变成了预处理器。
如前所述,docker stack
当前不支持 .env
。
所以另一种方法是通过env_file
明确指定环境文件,例如:
version: '3.3'
services:
foo-service:
image: foo-image
env_file:
- .env
environment:
- SOME_ENV=qwerty
我遇到了同样的问题,
我的问题是由另一个 python 虚拟环境中的 运行 docker-compose 引起的。
希望对您有所帮助。
似乎 运行 在不同的 python 虚拟环境中,我破坏了 docker-compose 依赖 pythondotenv
你可以创建一个deploy.sh
export $(cat .env) > /dev/null 2>&1; docker stack deploy ${1:-STACK_NAME}
.env
解析没有正则表达式或不稳定的技巧。
#comments
在 .env
中产生的 stderr
上的错误将被重定向到 stdin
(2>&1)
- 现在
stdin
上所有 export
和 error
的不需要的照片也被重定向到 /dev/null
。这可以防止控制台泛滥。
- 这些错误不会阻止
.env
被正确解析。
我们可以在 .env
中定义 STACK_NAME
但我们也可以通过自定义 stack_name
. deploy.sh <stack_name> (stack_name opcional)
这个解决方法让我头疼了 3 个晚上
我曾经将我的图像版本外部化到我的 .env 文件中。这使得维护变得容易,我不会仅仅为了升级版本而修改我的 docker-compose.yml
文件,所以我确定我不会错误地删除一行。
但是当我尝试使用 stack
将我的服务部署到 swarm
时,docker 引擎抱怨我的图像不正确 reposity/tag以下消息:
Error response from daemon: rpc error: code = 3 desc = ContainerSpec: "GROUP/IMAGE:" is not a valid repository/tag
要解决这个问题,我可以直接在 docker-compose.yml
文件中修复图像版本。这里有任何逻辑还是错误?但这混合了 docker-compose 和可变部分的固定部分。
干杯, 奥利维尔
答案很简单:这不是错误,也不是功能。 .env
当前不受 docker stack
支持。
您必须在 运行 docker stack ...
.env
运行 export $(cat .env)
DockerGithub 中存在讨论此需求的问题。 https://github.com/docker/docker.github.io/issues/3654 另一个讨论问题和解决方案:https://github.com/moby/moby/issues/29133#issuecomment-285980447
docker stack deploy
中的 yaml 解析器不具有 docker-compose
中的所有相同功能。但是,在完成所有变量替换、扩展其他文件以及将多个文件合并在一起之后,您可以使用 docker-compose config
输出一个 yaml 文件。这有效地将 docker-compose
变成了预处理器。
如前所述,docker stack
当前不支持 .env
。
所以另一种方法是通过env_file
明确指定环境文件,例如:
version: '3.3'
services:
foo-service:
image: foo-image
env_file:
- .env
environment:
- SOME_ENV=qwerty
我遇到了同样的问题, 我的问题是由另一个 python 虚拟环境中的 运行 docker-compose 引起的。
希望对您有所帮助。
似乎 运行 在不同的 python 虚拟环境中,我破坏了 docker-compose 依赖 pythondotenv
你可以创建一个deploy.sh
export $(cat .env) > /dev/null 2>&1; docker stack deploy ${1:-STACK_NAME}
.env
解析没有正则表达式或不稳定的技巧。#comments
在.env
中产生的stderr
上的错误将被重定向到stdin
(2>&1)- 现在
stdin
上所有export
和error
的不需要的照片也被重定向到/dev/null
。这可以防止控制台泛滥。 - 这些错误不会阻止
.env
被正确解析。
我们可以在 .env
中定义 STACK_NAME
但我们也可以通过自定义 stack_name
. deploy.sh <stack_name> (stack_name opcional)
这个解决方法让我头疼了 3 个晚上