如何使用正则表达式

时间:2018-10-22 10:51:24

标签: docker docker-compose dockerfile

我有一个使用自动管道作业构建的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 ”还是什么? <-   不起作用。

1 个答案:

答案 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文件中。