Docker pull 默认并发数是3,即同时下载3个layer,该值由max-concurrent-downloads配置控制,影响的是layer级并发而非单layer内部分块,并发提升受限于registry限流、磁盘I/O和TLS开销。

docker pull 默认并发数是多少?为什么拉得慢
默认是 3 个并发连接下载 layer,不是按镜像整体并发,而是对每个 layer 的 HTTP 分块请求做连接复用,但底层受限于 max-concurrent-downloads 配置。很多用户在内网或高速带宽环境发现拉取没跑满带宽,就是卡在这个默认值上。
- 并发数影响的是「同时发起的 layer 下载请求数」,不是单个 layer 内部的 chunk 并发
- 实际吞吐还受 registry 端限流、本地磁盘 I/O、TLS 握手开销制约,调高不一定线性提升
- dockerd 20.10+ 才支持动态调整该参数;老版本(如 19.03)即使配置了也无效
怎么改 docker pull 并发数:daemon.json 配置项
修改的是守护进程级配置,不是 docker pull 命令参数。必须重启 dockerd 才生效,且对所有后续 pull 操作统一生效。
- 编辑
/etc/docker/daemon.json,加入"max-concurrent-downloads": 10(推荐 5–20,别设 >50) - 运行
sudo systemctl restart docker,确认生效:sudo cat /var/run/docker.pid && sudo kill -SIGHUP $(cat /var/run/docker.pid)或直接 restart - 验证是否加载成功:
docker info | grep "Max Concurrent Downloads"(注意大小写和空格) - 如果提示
unknown configuration key,说明 dockerd 版本太低,需升级
registry 端限流会覆盖 client 端并发设置
哪怕你把 max-concurrent-downloads 设成 100,如果 registry(比如 Harbor、ECR、自建 Nexus)本身对 IP 或 token 做了每秒请求数限制(QPS),实际并发仍会被掐断,甚至触发 429 Too Many Requests。
- Harbor 默认对匿名请求限流 5 QPS,登录后提升到 50;需检查
harbor.yml中rate_limits配置 - AWS ECR 对单个 registry 的默认限流是 1000 请求/分钟(≈16 RPS),但按 IP 统计,多台机器共用出口 IP 就容易撞限
- 遇到
error pulling image configuration: unknown blob或大量429日志,先查 registry 侧监控,别只盯着 client
pull 时加 --platform 会影响 layer 并发行为吗
会,而且影响很实际:指定 --platform 后,docker 会重新解析 manifest,可能命中不同的 manifest list 子项,导致下载的 layer 集合变化,进而改变并发请求的实际目标数量和大小。
- 例如拉
alpine:latest不加平台,可能拿到 multi-arch manifest,只下载当前架构 layer;加--platform linux/arm64可能触发额外的跨架构 layer 获取逻辑 - 某些 registry 对 manifest 查询也计入限流,频繁切换 platform 会增加元数据请求次数
- 调试时可用
docker manifest inspect --verbose IMAGE看实际解析出的 layers 和 digest,比盲调并发更有效
docker pull --quiet + time 测基线,再改配置对比,否则容易把网络抖动当成并发不足。










