【发布时间】:2018-12-27 13:58:23
【问题描述】:
我有一个带有三个标签repo:latest、repo:v1.1、repo:dev 的 docker 映像。当我执行docker push repo:v1.1 时,只会将一个标签推送到存储库中。有没有办法对所有标签进行一次推送,或者我需要按标签推送?
【问题讨论】:
我有一个带有三个标签repo:latest、repo:v1.1、repo:dev 的 docker 映像。当我执行docker push repo:v1.1 时,只会将一个标签推送到存储库中。有没有办法对所有标签进行一次推送,或者我需要按标签推送?
【问题讨论】:
docker push 命令不接受多个参数(如果有人想一次性推送多个标签的选择(不是全部)),因此需要分别推送每个标签,例如:
for t in latest v1.1 dev; do
docker push "repo:${t}"
done
否则,如@GuillaumePancak's answer 中所述,人们可能有兴趣依赖--all-tags 可用的标志from Docker 20.10.0。
还要注意,经常考虑为同一图像推送 几个不同的标签(这也可能是您的用例)。在这种情况下,连续推送这些标签(而不是同时推送多个并发进程)确保标签同义词的docker push 在使用给定标签推送一次图像后几乎立即出现。
【讨论】:
docker push image:tag1 image:tag2 仍然不可用。然而,正如@GuillaumePancak 的回答所指出的那样,--all-tags CLI 选项可能很有用。也将编辑我的答案以链接到此答案。
如果你想为一张图片推送所有标签,你可以使用--all-tags选项:
docker image push --all-tags repository/image_name
Docker 20.10 and newer 支持此选项。可以通过在旧版本上省略 --all-tags 来实现相同的行为。
【讨论】:
我也遇到过类似的情况,可以这样解决:
在我的示例中,我将使用 elonmusk/spacerocket 作为示例存储库名称。您应该将其替换为您的
name/repo。
# First I build and tag my image:
docker build --tag elonmusk/spacerocket:tag-1 --tag elonmusk/spacerocket:tag-2 --tag elonmusk/spacerocket:flymetothemoon .
在运行docker images 后给出此输出
(我已经从这个表中省略了 CREATED 和 SIZE)
REPOSITORY TAG IMAGE ID
elonmusk/spacerocket tag-1 1a4acbyb12db
elonmusk/spacerocket tag-2 1a4acbyb12db
elonmusk/spacerocket flymetothemoon 1a4acbyb12db
现在当我在没有任何标签的情况下执行docker push elonmusk/spacerocket 时,它会为我推送所有标签。
# First I build my image:
docker build -t thiscouldbewhatever . # -t is shorthand for --tag
给出这个输出:
REPOSITORY TAG IMAGE ID
thiscouldbewhatever latest 1a4acbyb12db
现在我开始标记:
docker tag thiscouldbewhatever elonmusk/spacerocket:tag-1
docker tag thiscouldbewhatever elonmusk/spacerocket:tag-2
docker tag thiscouldbewhatever elonmusk/spacerocket:tag-3
docker tag thiscouldbewhatever elonmusk/spacerocket:whystopatthemoon
最后推送我所有的标签:
# push the repo without using a tag.
docker push elonmusk/spacerocket
# Just to be double clear, this will only push one tag:
docker push elonmusk/spacerocket:tag-1
【讨论】:
目前有change可以同时推送多张图片,正在审核中。
但它只为docker push 添加了一个循环,而不是并行化它们。
所以目前唯一的解决方案是分别推送每个标签。
【讨论】:
在脚本中,您可以执行这样的循环来推送图像的所有标签; ${1} 是传递给脚本的第一个参数;喜欢docker_push myimage
for i in $(docker image list --format "{{.Tag}}" "${1}"); do
docker push "${1}:$i"
done
【讨论】: