Docker push:使用多个标签一次推送图像

时间:2018-12-27 13:58:23

标签: docker

我有一个带有三个标签repo:latestrepo:v1.1repo:dev的docker映像。当我执行docker push repo:v1.1时,只会将一个标签推入存储库。是否可以通过所有标签进行一次推送,或者我需要按标签推送?

5 个答案:

答案 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可以实现相同的行为。


更多信息:Docker push documentation

答案 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