我有一个带有三个标签repo:latest
,repo:v1.1
,repo:dev
的docker映像。当我执行docker push repo:v1.1
时,只会将一个标签推入存储库。是否可以通过所有标签进行一次推送,或者我需要按标签推送?
答案 0 :(得分:4)
docker push命令不接受多个标签作为参数,因此您需要分别推送每个标签,例如:
for t in repo:latest repo:v1.1 repo:dev; do
docker push "${t}"
done
还要注意,经常考虑为同一张图片推送几个不同的标签(在这里也可能是您的用例)。在这种情况下,连续推入这些标签(而不是同时进行多个并发过程)可确保在使用给定标签将图像推入一次后,标签同义词的docker push
几乎是立即可用的。
答案 1 :(得分:4)
如果要为图像推送所有标签,可以使用--all-tags
选项:
docker image push --all-tags repository/image_name
Docker 20.10 and newer支持此选项。通过在旧版本中省略--all-tags
可以实现相同的行为。
答案 2 :(得分:1)
我也有类似的情况,并且能够这样解决:
在我的示例中,我将使用 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
答案 3 :(得分:0)
当前有change可以同时推送多张图片,目前正在审核中。
但是它只会为docker push
添加一个循环,而不是并行化它们。
因此,目前,唯一的解决方案是分别推送每个标签。
答案 4 :(得分:0)
在脚本中,您可以执行如下循环以推送图像的所有标签; ${1}
是传递给脚本的第一个参数;像docker_push myimage
for i in $(docker image list --format "{{.Tag}}" "${1}"); do
docker push "${1}:$i"
done