【问题标题】:How to tag docker image with docker-compose如何使用 docker-compose 标记 docker 镜像
【发布时间】:2016-02-22 08:05:33
【问题描述】:

我想通过 docker-compose 构建图像并为其设置特定标签。 Documentation 说:

Compose 将使用生成的名称构建和标记它,并使用该名称 之后的图像。

但我找不到指定标签的方法,对于构建的图像,我总是看到“最新”标签。

【问题讨论】:

标签: docker docker-compose


【解决方案1】:

似乎文档/工具已更新,您现在可以将image 标签添加到您的脚本中。这对我来说是成功的。

例子:

version: '2'
services:

  baggins.api.rest:
    image: my.image.name:rc2
    build:
      context: ../..
      dockerfile: app/Docker/Dockerfile.release
    ports:
      ...

https://docs.docker.com/compose/compose-file/#build

【讨论】:

  • 确实,它说“如果您指定图像以及构建,那么 Compose 使用 webapp 和图像中指定的可选标签命名构建的图像”
  • 多么奇怪的界面!一个字段的存在会反转处于相同缩进级别的另一个字段的语义。
  • 是的,我发现这个概念很奇怪。我期待一个tag 选项。我在文档中寻找标签无济于事
  • @Navin 如果这还不够奇怪,请尝试将 image: my.image.name:rc2 放入 docker-compose.yml 并将 build: . 放入 docker-compose.override.yml 并让 docker-compose 合并两者! (你得到与接受的答案相同的效果)
  • 我通过传递环境变量 OP_ENV(开发、阶段或产品)来构建/运行。我可以在标签中引用它,对我来说效果很好:image: avail_imageresizer/build_test_uwsgi:${OP_ENV}
【解决方案2】:

原始答案2015 年 11 月 20 日

截至今天,没有特定标签的选项。 Docker compose 只是发挥了它的魔力,并像你看到的那样分配一个标签。调用 docker-compose 后,您始终可以调用一些脚本 docker tag <image> <tag>

现在有一个如上所述的选项或here

build: ./dir
image: webapp:tag

【讨论】:

    【解决方案3】:

    如果你指定镜像和构建,那么 Compose 使用 webapp 和镜像中指定的可选标签命名构建的镜像:

    build: ./dir
    image: webapp:tag
    

    这会生成一个名为 webapp 并标记为 tag 的图像,由 ./dir 构建。

    https://docs.docker.com/compose/compose-file/#build

    【讨论】:

      【解决方案4】:

      你可以试试:

      services:
        nameis:
          container_name: hi_my
          build: .
          image: hi_my_nameis:v1.0.0
      
      

      【讨论】:

        【解决方案5】:

        我想补充一点,您还可以通过环境变量或 .env 文件来管理您的标签版本。

        https://docs.docker.com/compose/environment-variables/#the-env-file

        export TAG=1.11

        例子:

        version: '3.3'
        services:
        
          baggins.api.rest:
            image: my.image.name:{$TAG}
            build:
              context: ../..
              dockerfile: app/Docker/Dockerfile.release
            ports:
              ...
        

        docker-compose config 验证

        在我的 ci 管道中,我的第一个构建被标记为用于运行测试的一次性值。然后在推送到注册表之前,我将标签更改为最新并再次重建(几乎是瞬间,因为它已全部缓存)。

        【讨论】:

          【解决方案6】:

          如果您已经构建了镜像,您可以使用docker tag 命令重新标记它:

          docker tag imagename imagename:v1.0
          
          docker tag imagename:v1.0 imagename:v1.1
          

          如果您的存储库附加了多个标签,并且想要删除其中一个,可以使用docker rmi 命令:

          $ docker rmi imagename:v1.0
          Untagged imagename:v1.0
          

          参考:

          【讨论】:

            【解决方案7】:

            确保 Dockerfile 中的 FROM 语句包含正确的映像名称。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多