[英]'docker-compose pull' can't pull image that is pullable by 'docker'
[英]docker compose pull newest image
我有一些微服务。 Jenkins 构建这些项目,创建 docker 图像并将它们发布到工件。 我有另一个使用这些 docker 图像的自动化测试项目。 我们有一个 docker-compose 文件,其中包含所有微服务映像的所有配置。
以下是样品 docker-compose
version: "1.0"
services:
my-service:
image: .../my-service:1.0.0-SNAPSHOT-1
container_name: 'my-service'
restart: always
volumes:
...
ports:
...
...
所有这些都工作正常。 现在要更新图像,我必须手动更改 docker-compose 中的图像标签 (1.0.0-SNAPSHOT-2)。
这是一个问题,因为这涉及到人为干预。 有没有什么方法可以拉取最新的 docker 映像而不改变 docker-compose?
注意 - 我无法创建带有最新标签的图像。 在工件中发布具有相同名称的图像时出现问题(未经授权:客户端没有清单的权限:没有足够的权限来删除/覆盖工件)。
那么实际上您可以做的是,在 cli 命令 (envsubst) 中使用环境变量替换。 让我解释一个场景作为例子。
首先在 docker-compose.yaml 中定义一个环境变量,作为容器的标签
version: "3"
services:
my-service:
image: .../my-service:$TAG
container_name: 'my-service'
restart: always
volumes:
...
ports:
...
...
其次,使用 cli 命令(或终端),您可以使用版本定义环境变量。 这部分很重要,因为在这里你将你的版本标签添加到容器中(你可以执行 bash 命令来提取一些 id,或者最后的 git 提交或者你想要作为容器标签执行的任何东西,我给你一些想法)
export TAG=1.0.0-SNAPSHOT-1
export TAG="$(bash /path/to/script/tag.sh)"
export TAG="$(git log --format="%H" -n 1)"
第三部分和最后一个是执行“envsubst”,然后执行 docker-compose.yaml 来部署您的容器。 注意 pipe |,对于执行非常重要。
envsubst < docker-compose.yaml | docker-compose up -d
链接到envsubst
我使用这种格式在kubernetes中部署标记容器,但思路必须与docker compose相同。
envsubst < deployment.yaml | kubectl apply -f -
并将 docker-compose.yaml 中的版本更改为 3。 祝你好运
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.