我有一个使用自动管道作业构建的docker映像。
它叫做:
REPOSITORY TAG IMAGE ID
test-001-com:3000/img 1.23-SNAPSHOT 2f83de9h895e
注意:标记每天都会更改,因此明天将是1.24-快照等等...
我的问题是:
我如何在docker-compose中使用“ image”参数来传递正则表达式或不需要每次都更新以匹配TAG的内容。
docker-compose.yml:
services:
test-001:
hostname: "test-001"
container_name: "test-001"
image: "test-001-com:3000/img:1.23-SNAPSHOT"
ports:
- "8000:8000"
version: "2.1"
上面的docker-compose.yml可以工作,但是我可以替换:
图片:“ test-001-com:3000 / img: 1.23-快照”
有
图片:“ test-001-com:3000 / img: *-SNAPSHOT ”还是什么? <- 不起作用。
答案 0 :(得分:2)
您不能那样做。 image:
必须命名精确的版本标签,或者没有名称标签,并使用隐含的...:latest
版本。通常,Docker不支持此功能。没有简单的方法可以通过标签搜索可用的图像并与正则表达式或shell glob匹配,您必须知道要查找的内容。即使您确实有一个标签列表,也没有统一的“最新”定义。
您将其标记为“ kubernetes”。如果这实际上是一个Kubernetes问题,那么最好的方法是设置您的连续部署系统以为您更新Kubernetes部署。 Kubernetes将尝试在删除旧Pod之前使用新版本启动新Pod,因此您应该获得零停机升级。 (Helm是注入这样的参数的常用工具;如果升级出错,它也很容易支持回滚更新。)
您的示例使用Docker Compose。 image:
字段是variable substitution工作的地方之一,因此您可以设置
image: "test-001-com:3000/img:${IMAGE_VERSION:-latest}"
,然后将IMAGE_VERSION
设置为环境变量或在同一目录的.env
文件中。