【问题标题】:How to Pull all docker container images from docker repo at once?如何一次从 docker repo 中提取所有 docker 容器映像?
【发布时间】:2017-06-03 02:35:18
【问题描述】:

我有一个私人 docker 存储库,其中存储了 10 个容器映像。我想将所有图像拉到一台机器上。有没有一种方法可以使用单个命令从存储库中提取所有图像?一些命令,如

docker pull  xx.xx.com/reponame/* 

在研究过程中,我找到了提取单个图像的所有标签的方法;但到目前为止所有图像都没有运气

【问题讨论】:

    标签: docker containers


    【解决方案1】:

    试试这个(它会更新没有直接附加运行容器的图像)

    docker images | awk '(NR>1) && ($2!~/none/) {print $1":"$2}' | xargs -L1 docker pull
    

    先试试这条线,看看会覆盖哪些图像:

    docker images | awk '(NR>1) && ($2!~/none/) {print $1":"$2}'
    

    【讨论】:

      【解决方案2】:

      使用格式标签过滤存储库列表。虽然这只会拉取主机中已经存在的那些。

      for image in $(docker images --format "{{.Repository}}"); do docker pull $image; done
      

      【讨论】:

        【解决方案3】:

        可以用docker-compose“破解”这个。

        # docker-compose.yml
        version: '3.1'
        services:
          a:
            image: a-image
          b:
            image: b-image
          c:
            image: c-image
        # .....
        

        docker-compose pull --parallel

        【讨论】:

        • 谢谢你!我想做一些与问题不同的事情。我遇到了您的答案,该答案对我的需要有用。感谢这次黑客攻击。
        【解决方案4】:

        关于命令的docker文档:docker pull,你可以使用选项

        --all-tags
        

        下载存储库中所有标记的图像。

        在你的情况下,它会是:

        docker pull --all-tags  xx.xx.com/reponame 
        

        【讨论】:

          【解决方案5】:

          在 shell 脚本下运行,一次从 Docker Registry 中提取所有带有 ALL TAGS 的 DOCKER 图像,

          外壳脚本:

          #/bin/bash
          set-x
          registry="registry name/ip:port"
          repos=`curl -u cloudfx:cFx2018Aug http://$registry/v2/_catalog?n=300 | jq '.repositories[]' | tr -d '"'`
          for repo in $repos; do 
             docker pull --all-tags $registry/$repo;
          done
          

          【讨论】:

            【解决方案6】:

            简单。

            安装 jq 以解析 JSON,编辑 REGISTRY 变量并运行此脚本:

            #!/bin/sh
            
            REGISTRY="http://registry:5000"
            
            for repo in $(curl -s $REGISTRY/v2/_catalog | jq -r '.repositories[]') ; do
                for tag in $(curl -s $REGISTRY/v2/$repo/tags/list | jq -r '.tags[]') ; do
                    docker pull $REGISTRY/$repo:$tag
                done
            done
            

            有关 Docker Registry API 的详细信息: https://github.com/docker/distribution/blob/master/docs/spec/api.md

            【讨论】:

            • 这将使用大量带宽和空间来获取所有这些图像。遗憾的是,似乎无法添加在请求图像时按需搜索的存储库。您可能会在 Dockerfile 中放置完整的 repo 路径,而不是预先获取所有这些路径以作为依赖项,但我没有对此进行测试。
            【解决方案7】:

            不确定单行命令是什么类型的命令?

            for repo in repo1 repo2 repo3; do docker pull xx.xx.com/$repo; done
            

            【讨论】:

              猜你喜欢
              • 2020-06-10
              • 1970-01-01
              • 1970-01-01
              • 2018-11-09
              • 2020-04-27
              • 1970-01-01
              • 1970-01-01
              • 2018-12-31
              • 2019-04-05
              相关资源
              最近更新 更多