【发布时间】:2017-06-03 02:35:18
【问题描述】:
我有一个私人 docker 存储库,其中存储了 10 个容器映像。我想将所有图像拉到一台机器上。有没有一种方法可以使用单个命令从存储库中提取所有图像?一些命令,如
docker pull xx.xx.com/reponame/*
在研究过程中,我找到了提取单个图像的所有标签的方法;但到目前为止所有图像都没有运气
【问题讨论】:
标签: docker containers
我有一个私人 docker 存储库,其中存储了 10 个容器映像。我想将所有图像拉到一台机器上。有没有一种方法可以使用单个命令从存储库中提取所有图像?一些命令,如
docker pull xx.xx.com/reponame/*
在研究过程中,我找到了提取单个图像的所有标签的方法;但到目前为止所有图像都没有运气
【问题讨论】:
标签: docker containers
试试这个(它会更新没有直接附加运行容器的图像)
docker images | awk '(NR>1) && ($2!~/none/) {print $1":"$2}' | xargs -L1 docker pull
先试试这条线,看看会覆盖哪些图像:
docker images | awk '(NR>1) && ($2!~/none/) {print $1":"$2}'
【讨论】:
使用格式标签过滤存储库列表。虽然这只会拉取主机中已经存在的那些。
for image in $(docker images --format "{{.Repository}}"); do docker pull $image; done
【讨论】:
可以用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
【讨论】:
关于命令的docker文档:docker pull,你可以使用选项
--all-tags
下载存储库中所有标记的图像。
在你的情况下,它会是:
docker pull --all-tags xx.xx.com/reponame
【讨论】:
在 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
【讨论】:
简单。
安装 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
【讨论】:
不确定单行命令是什么类型的命令?
for repo in repo1 repo2 repo3; do docker pull xx.xx.com/$repo; done
【讨论】: