Oli*_*ier 4 docker docker-swarm-mode docker-stack
我曾经将映像版本外部化为.env文件。这使维护变得容易,而且我docker-compose.yml不仅仅为了升级版本就修改文件,所以我确定我不会误删一行。
但是当我尝试将我的服务部署stack到时swarm,docker引擎抱怨我的映像不是正确的存储库/标签,并带有以下确切消息:
来自守护程序的错误响应:rpc错误:代码= 3 desc = ContainerSpec:“组/图像:”不是有效的存储库/标签
要解决此问题,我可以直接在docker-compose.yml文件中修复映像版本。这里有逻辑还是一个错误?但这混合了docker-compose和变量部分的修复部分。
干杯,奥利维尔
中的yaml解析器docker stack deploy不具有中的所有相同功能docker-compose。但是,docker-compose config在完成所有变量替换,扩展其他文件以及将多个文件合并在一起之后,您可以用来输出yaml文件。这实际上变成docker-compose了预处理器。
小智 7
你可以创建一个deploy.sh
export $(cat .env) > /dev/null 2>&1; docker stack deploy ${1:-STACK_NAME}
Run Code Online (Sandbox Code Playgroud)
.env。stderr产生的错误将被重定向到(2>&1)#comments.envstdinexport以及error现在的打印stdin都被重定向到/dev/null. 这可以防止控制台泛滥。.env正确解析。我们可以STACK_NAME在我们的中定义.env,但我们也可以通过我们的自定义stack_name
. deploy.sh <stack_name> (stack_name opcional)
Run Code Online (Sandbox Code Playgroud)
这个解决方法让我头痛了三个晚上
答案很简单:它不是错误,也不是功能。.env目前不受的支持docker stack。您必须先手动获取.env运行的export $(cat .env)运行源docker stack ...
Docker Github中讨论此需求存在一个问题。 https://github.com/docker/docker.github.io/issues/3654 和另一个讨论问题和解决方案的人:https : //github.com/moby/moby/issues/29133#issuecomment-285980447
小智 4
正如已经提到的,.env当前不支持docker stack. 因此,另一种方法是使用 by 明确指定环境文件env_file,例如:
version: '3.3'
services:
foo-service:
image: foo-image
env_file:
- .env
environment:
- SOME_ENV=qwerty
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2719 次 |
| 最近记录: |