operations

docker pull 慢或失败:系统化排查清单(网络、代理与 Registry)

把「慢」拆成 DNS/TLS/带宽/限流/缓存命中几层:给研发与运维一套可按步骤执行的定位方法。

xTag 团队
12 分钟阅读
docker pull
镜像加速
网络排查
容器

docker pull 慢或失败:系统化排查清单(网络、代理与 Registry)

「pull 很慢」在团队里经常被归因成一句话:网络不好。实际上,镜像拉取链路很长:DNS 解析 → TLS 握手 → Registry API → blob(layer)下载 → 本地存储。任何一层都可能成为瓶颈。

本文提供一套分层排查方法,尽量把问题从「感觉慢」变成「慢在哪」。

1. 先区分:是 API 慢还是 layer 下载慢

很多时候 Registry 的清单(manifest)早已返回,但 layer 下载很慢。反之也可能是 manifest 请求失败导致不断重试。最简单的判断方式是观察客户端日志:停滞阶段发生在哪个步骤。

2. DNS 与 TLS:高频但容易被忽略

  • DNS:解析不稳定会导致间歇性超时;企业内网 DNS 策略变更也经常「顺便」影响容器环境。
  • TLS 握手超时:可能是跨国链路、代理配置不当、或中间设备替换证书导致校验失败。

验证思路通常是从运行容器的主机出发,用最小工具验证解析与 TLS(例如 dig / nslookup、针对性 curl -v)。不要在未确认路径的情况下盲目加大超时时间。

3. 代理:Daemon 代理与系统代理不是同一件事

常见误区是把系统环境变量当成万能钥匙。容器引擎、守护进程与构建工具各自可能有独立的代理配置入口;另外要注意:哪些流量需要代理、哪些必须直连,混用会导致「有时候快,有时候慢」。

4. Registry 限流:toomanyrequests 不是偶然

公共 Registry 往往对匿名与登录用户有不同的速率限制。CI 并发拉取多个镜像时,最容易触发限流。应对策略通常包括:

  • 登录后拉取(提高配额)
  • 降低并发或引入缓存/镜像分发(治理层面)
  • 错峰与退避重试(工程层面)

5. 本地存储:磁盘慢也会表现为 pull 卡

磁盘接近写满、inode 不足、存储驱动异常,都可能让 pull 过程长时间停顿。建议把主机磁盘与 Docker/containerd 存储目录纳入常规巡检。

6. 面向团队的「最小标准化」

把以下内容写成一页团队规范,会显著减少扯皮:

  • 允许使用的 Registry 列表与默认镜像源策略
  • CI 拉取的并发上限与重试策略
  • 代理与证书问题的升级路径(谁能改、改哪里)

7. 小结

docker pull 的问题很少是单一原因。把链路分层定位,才能避免「只会重启」或「只会换镜像站」。当你能稳定复现并指出瓶颈层级时,治理方案(缓存、权限、网络)才会有针对性。

相关文章

operations

国内团队容器镜像落地一页清单:开发机、构建机与集群出口

把最常见的坑收敛成可勾选条目:出口不一致、凭据分散、tag 策略失控与缓存误区。