我有一个使用自动管道作业构建的docker镜像。
它称为:
REPOSITORY TAG IMAGE ID
test-001-com:3000/img 1.23-SNAPSHOT 2f83de9h895e
注意:标记每天都会更改,因此明天它将是1.24-SNAPSHOT等...
我的问题是:
如何在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可以工作,但是我可以替换:
与
最佳答案
你不能那样做。 image:
必须命名一个确切的版本标签,或者没有标签,并使用隐含的...:latest
版本。通常,Docker不支持此功能。没有简单的方法可以通过标签搜索可用图像并与正则表达式或shell全局匹配,您必须知道要查找的内容。即使您确实有一个标签列表,也没有统一的“最新”定义。
您将此标记为“kubernetes”。如果这实际上是一个Kubernetes问题,那么最好的方法是设置您的连续部署系统以为您更新Kubernetes部署。 Kubernetes将尝试在删除旧Pod之前使用新版本启动新Pod,因此您应该获得零停机时间升级。 (Helm是注入(inject)这样的参数的常用工具;如果升级出错,它也很容易支持回滚更新。)
您的示例使用Docker Compose。 image:
字段是variable substitution工作的地方之一,因此您可以设置
image: "test-001-com:3000/img:${IMAGE_VERSION:-latest}"
然后将
IMAGE_VERSION
设置为环境变量或在同一目录中的.env
文件中。关于docker - 如何使用正则表达式在docker-compose文件中指定docker镜像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52927576/