Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 图像是否可能有多个标记?_Docker_Dockerhub - Fatal编程技术网

Docker 图像是否可能有多个标记?

Docker 图像是否可能有多个标记?,docker,dockerhub,Docker,Dockerhub,当我将新图像推送到repo时,我希望它有两个标签,例如0.2和latest。这将允许始终使用latest标记来获取最新的图像版本,例如使用0.2标记来获取特定的版本。docker有可能吗 有什么解决办法吗?我看到的唯一解决方案是进行两次单独的推送…您可以创建多个标记: docker tag <id> <user>/<image>:0.2 docker tag <id> <user>/<image>:latest docke

当我将新图像推送到repo时,我希望它有两个标签,例如
0.2
latest
。这将允许始终使用
latest
标记来获取最新的图像版本,例如使用
0.2
标记来获取特定的版本。docker有可能吗


有什么解决办法吗?我看到的唯一解决方案是进行两次单独的推送…

您可以创建多个标记:

docker tag <id> <user>/<image>:0.2
docker tag <id> <user>/<image>:latest
docker标签/:0.2
docker标签/:最新

然后按下这些按钮。

每个版本需要按下一次按钮,如:

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

因此,这些将指向同一图像层。

您可以使用多个标记构建图像,然后使用
--all tags
选项推送图像

例如:

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

docker push reg/user/image --all-tags

默认情况下,不支持
--all tags
的较旧Docker客户端将推送所有标记(只需省略该选项),较新客户端默认情况下仅推送
最新的
。另一种选择是,您可能希望单独推送每个标记。

在图像上有多个标记是有充分理由的(请参见OP),但如果您希望添加标记以供参考,则最好使用图像标签

Docker标签位于图像内部,而不是应用于注册表中的图像。这意味着标签是不可变的,并且总是随图像一起复制


版本
vcs参考
构建日期
等内容定义可互操作标签列表。

更新:2021年1月之前

如果您不在push命令中指定标记,它将推送所有标记

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

docker push user/imagename

从Docker 1.10开始,你也可以这样做:
Docker build-t/:0.2-t/:latest。
你需要推送每个标签才能推送每个标签,还是只需推送一个标签?@Wmbuch@EdRandall从
Docker版本18.06.1-ce开始,构建e68fc7a
我必须独立推送每个标签,即使它们在本地指向相同的图像id。第一个图像id之后的推送显然是每个层的“层存在”,因此它们本身不传输任何数据,但无论如何都必须执行。您是否尝试过无标记的docker push user/repository?我认为推送每个标签。@adrio此行为已被更改,没有标签的推送不再推送所有标签,请看这正是我要找的。谢谢这应该是首选答案。我支持这个。看起来推送本地图像名称假设dockerhub-我使用Docker desktop,所以我必须单独推送每个标记。是否需要设置目标注册表/repo?@badcop666
reg/user/image
中的“reg”用于标识目标注册表。(Docker Hub的注册表是
Docker.io
,默认名称空间称为
library
。因此,如果拉或推一个名为“foo”的图像,它会隐式地将其标识为
Docker.io/library/foo
)–使用
registry.your domain.com/your namespace/your image
,这应该可以工作。这假设CLI。请注意,在Docker 20.03中,此代码将仅推送
reg/user/image:latest
,而不是推送所有标记。当前的行为是,在
docker push
中忽略标记时,推送所有标记,这是未记录的,并且被认为是令人困惑的,因此现在,如果不推送最新标记,您仍然可以在20.03中通过添加
-a/--all tags
flagNO推送所有标记。在注册表中找不到。您试过了吗?警告:从2021年1月起,情况似乎不再如此
docker tag user/imagename:tag1
docker tag user/imagename:tag2

docker push user/imagename