图像是否可以有多个标签?

use*_*521 32 docker dockerhub

当我将新图像推送到repo时,我希望它有两个标签,例如0.2latest.这将允许总是通过使用latest标签和特定版本通过使用0.2标签来拉取最新图像版本.码头工具有可能吗?

有没有解决方法?我看到的唯一解决方案就是两次单独推动......

man*_*lds 38

您可以创建多个标签:

docker tag <id> <user>/<image>:0.2
docker tag <id> <user>/<image>:latest
Run Code Online (Sandbox Code Playgroud)

并推动这些.

  • 从Docker 1.10起,你也可以这样做:`docker build -t <user>/<image>:0.2 -t <user>/<image>:latest .` (33认同)
  • @Adirio此行为已更改,没有标签的推送不再推送*所有*标签,请参阅https://github.com/docker/cli/pull/2220 (4认同)
  • 您是否需要按每个标签才能推送每个标签,还是可以只推送一个标签? (3认同)
  • @Wmbuch @EdRandall 从`Docker 版本 18.06.1-ce, build e68fc7a` 开始,我不得不独立推送 *each* 标签,即使它们在本地指向相同的图像 ID。第一个之后的推送显然是每一层的“层存在”,因此它们本身不传输任何数据,但无论如何都必须执行。 (3认同)
  • 您是否尝试了没有标签的docker push user / repository?我认为这推动了每个标签。 (3认同)

h3n*_*rik 27

您需要为每个版本执行一次推送,例如:

docker tag test:latest <repo>/<user>/test:latest
docker push <repo>/<user>/test:latest

docker tag test:0.2 <repo>/<user>/test:0.2
docker push <repo>/<user>/test:0.2
Run Code Online (Sandbox Code Playgroud)

您还可以组合并说出latest版本0.2如下:

docker tag <repo>/<user>/test:latest <repo>/<user>/test:0.2
docker push <repo>/<user>/test:0.2
Run Code Online (Sandbox Code Playgroud)

所以那些将指向相同的图像层.

  • 否,如果不推送最新标签。您在注册表中找不到。你尝试过吗? (5认同)

Azi*_*aib 18

更新:2021 年 1 月之前

如果您没有在 push 命令中指定标签,它会推送所有标签。

docker tag user/imagename:tag1
docker tag user/imagename:tag2

docker push user/imagename
Run Code Online (Sandbox Code Playgroud)

  • 警告:自 2021 年 1 月起,情况似乎不再如此 https://github.com/docker/cli/pull/2220 (4认同)

Pet*_*ino 12

您可以使用多个标签构建图像,然后在不显式指定标签的情况下推送图像。这会将所有图像标签推送到图像注册表。

例:

docker build -t reg/user/image:foo -t reg/user/image:latest .

docker push reg/user/image
Run Code Online (Sandbox Code Playgroud)

  • 这正是我一直在寻找的。谢谢 (5认同)
  • 请注意,在 Docker 20.03 中,此代码将仅推送 `reg/user/image:latest`,**不是所有标签**。当前的行为,当在“docker Push”中省略标签时推送所有标签时,未记录并被认为令人困惑,因此现在它已[修复](https://github.com/docker/cli/pull/2220)仍然可以通过添加 `-a/--all-tags` 标志来推送 20.03 中的所有标签 (3认同)
  • @badcop666 `reg/user/image` 中的“reg”用于识别目标注册表。(Docker Hub 的注册表是“docker.io”,默认命名空间称为“library”。因此,如果您拉取或推送名为“foo”的映像,它会隐式地将其标识为“docker.io/library/foo”。 ) – 使用 `registry.your-domain.com/your-namespace/your-image`,应该可以。这假定是 CLI。 (2认同)