在将镜像推送到Docker公共仓库时,我是否需要手动标记为“latest”?

77
假设我有一张图片 me/mystuff:v0.0.1
我发现如果将其推送到仓库:
docker push me/mystuff:v0.0.1 

latest 没有被创建,在从另一台机器上拉取时,它会发出警告,例如:

ssh me@faraway
(faraway)  $ docker run -it me/mystuff /bin/bash

对于 me/mystuff:latest,这将导致未找到错误。

我可以添加最新的标签并显式地推送到公共存储库:

docker login me
docker tag me/mystuff:v0.0.1 me/mystuff:latest
docker push me/mystuff:latest

然后从另一台机器上:

docker pull me/mystuff

因为最新版本存在,所以它将起作用。

我还发现,一旦最新版本存在,当推送新的编号版本时,它不会自动更新。

我能否以某种方式消除手动标记“最新版本”的步骤,并使其自动指向最新的编号版本?

或者这是有原因的,比如允许开发版本(仅标记为 vN.N.N)与生产版本(标记为“最新版本”)分开?

1个回答

68

如果没有指定标签,最新版本将是标签的默认值。 如果您推送已标记的镜像,则不会替换当前使用最新标记的镜像。


14
有没有一个命令可以同时将它作为标签和最新版本推送?还是我需要用两个命令来实现?例如:docker push foo/bar:v1 docker push foo/bar - Florian Widtmann
13
注意:在不带标签的情况下推送(例如:docker push foo/bar)会推送所有以仓库foo/bar标记的本地镜像。如果其中一个没有标签,则可能会推送“latest”标签(如@Usman所说)。如果您的所有本地镜像都已标记,则只会推送这些标记(这可能不包括“latest”)。请注意,您可以轻松地为本地镜像创建多个标签,如this answer中所述,例如:创建一个本地的“latest”标签,然后可以进行推送。 - drevicko
18
肯定地说,docker tag me/mystuff:v0.0.1 me/mystuff:latest 就可以了,你不需要两个标签。 - Muhammad Rehan Saeed
4
Docker很聪明,如果你推送了两个标签,并且它们都具有相同的底层哈希值,那么它会识别并简单地添加第二个标签名称。 - ingyhere

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接