Docker官方CLI不支持docker pull一次性拉取镜像所有标签,必须先通过API或skopeo获取标签列表,再逐个执行docker pull;私有仓库需先登录并处理认证,推荐用skopeo替代以支持分页、多协议及无daemon操作。Docker 官方 CLI 不支持直接通过
docker pull 一次性拉取某个镜像仓库下的所有标签。 这是设计使然——docker pull 只能指定一个镜像名和一个标签(如 nginx:alpine),或省略标签默认拉取 latest,无法枚举并批量拉取全部 tag。但你可以通过组合外部工具实现“拉取所有标签”的效果。核心思路是:**先获取远程仓库的所有标签列表,再逐个拉取**。以下是实用方法:以 nginx 为例(需替换为你想操作的镜像名):
curl 调用 Docker Hub API 获取标签列表(无需登录):curl -s "https://hub.docker.com/v2/repositories/nginx/tags?page_size=100" | jq -r '.results[].name' | sort -V
docker pull 逐个执行(加 2>/dev/null 抑制重复拉取提示):curl -s "https://hub.docker.com/v2/repositories/nginx/tags?page_size=100" | jq -r '.results[].name' | sort -V | xargs -I{} docker pull nginx:{}
注意:Docker Hub 的 API 分页限制为 100 条/页,若标签超量需处理分页(page=2 等),或改用更稳定的第三方工具如 skopeo。
my-registry.example.com/myapp)通常不开放公开标签 API;需确认其是否支持 v2/_catalog 或 v2/<repo>/tags/list 接口docker login my-registry.example.com
curl -s --header "Authorization: $(awk '/^Auth:/ {print $2}' ~/.docker/config.json | base64 -d)" "https://my-registry.example.com/v2/myapp/tags/list" | jq -r '.tags[]'
之后同样用 xargs docker pull 拉取。
skopeo 是专为容器镜像操作设计的工具,支持无本地 daemon 查看远程标签skopeo list-tags docker://nginx
skopeo list-tags docker://nginx | jq -r '.Tags[]' | xargs -I{} docker pull nginx:{}
优势:不依赖 Docker daemon、支持更多 registry 协议、自动处理分页与认证。
head -n 10 预览标签再决定范围python),全量拉取可能耗时数小时docker pull 本身不支持通配符(如 nginx:*)或批量标签语法,任何“一键全拉”都是脚本封装