我有一个私人码头仓库,其中我存储了10个容器图像。我想把所有图像都拉到一台机器上。有没有办法可以用一个命令从回购中提取所有图像?像
这样的命令docker pull xx.xx.com/reponame/*
在研究时我找到了拉出单个图像的所有标签的方法;但到目前为止在所有图像上都没有运气
答案 0 :(得分:3)
试试这个(它将更新没有直接连接到它们的运行容器的图像)
docker images | awk '(NR>1) && ($2!~/none/) {print $1":"$2}' | xargs -L1 docker pull
首先尝试这一行,看看将覆盖哪些图像:
docker images | awk '(NR>1) && ($2!~/none/) {print $1":"$2}'
答案 1 :(得分:2)
在shell脚本下运行,以一次从Docker注册表中提取带有所有标签的所有DOCKER图像,
外壳脚本:
#/ bin / bash
设x
Registry =“注册表名称/ ip:端口”
repos = curl -u cloudfx:cFx2018Aug http://$registry/v2/_catalog?n=300 | jq '.repositories[]' | tr -d '"'
回购$ repos;做
docker pull --all-tags $ registry / $ repo;
完成
答案 2 :(得分:2)
使用filter标记来过滤存储库列表。虽然这只会拉出您主机中已经存在的那些。
for image in $(docker images --format "{{.Repository}}"); do docker pull $image; done
答案 3 :(得分:1)
可以使用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 :(得分:1)
易。
安装 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
答案 5 :(得分:1)
关于命令docker pull的docker文档,您可以使用选项
--all-tags
下载存储库中所有已标记的图像。
您的情况应该是:
docker pull --all-tags xx.xx.com/reponame
答案 6 :(得分:0)
不确定什么类型的命令是单个命令,单行?
for repo in repo1 repo2 repo3; do docker pull xx.xx.com/$repo; done