Docker pull 默认不显示实时下载速率,但可通过--progress=plain启用带滚动平均速率的简洁视图;也可用curl直连registry API测单层原始HTTP速率,或监控/var/lib/docker/tmp/目录增长估算平均速率。

默认情况下,docker pull 会显示各层的下载进度条和完成百分比,但**不直接显示实时下载速率(如 MB/s)**。不过可以通过组合方式间接获取每层的下载速度,核心思路是:利用 Docker 的日志输出 + 时间戳 + 数据量变化来估算瞬时或平均速率。
启用详细进度输出并观察控制台流式日志
Docker 从 20.10 版本起默认使用 auto 进度模式,已支持带速率提示的简洁视图。若未显示速率,可强制启用更详细的纯文本模式:
- 运行:
docker pull --progress=plain nginx:alpine - 输出示例:
Downloading 1.2 MB/5.8 MB (20%) [=====> ] 0.4 MB/s
- 注意:该速率是当前 layer 的**滚动平均速率**(通常基于最近几秒数据),不是瞬时峰值;不同层切换时会重置计算
用 time + curl 模拟单层下载(需已知 manifest 和 digest)
如果你需要精确测量某一层(layer)的原始 HTTP 下载速率,可跳过 Docker 客户端,直接调用 registry API:
- 先获取镜像 manifest:
docker pull --quiet nginx:alpine后,用docker inspect nginx:alpine查RepoDigests,或手动请求https://registry-1.docker.io/v2/library/nginx/manifests/alpine(需带 token 认证) - 从中提取某一层的
digest(如sha256:abc123...) - 用 curl 带
-w参数测速:curl -L -o /dev/null -w "speed_download: %{speed_download} MB/s " https://registry-1.docker.io/v2/library/nginx/blobs/sha256:abc123... - 该方式绕过 Docker 缓存和校验,反映真实网络吞吐,适合调试网络瓶颈
监控后台拉取过程中的实时字节增量(Linux/macOS)
当 docker pull 正在运行时,Docker daemon 会将临时层数据写入 /var/lib/docker/tmp/(Linux)或 ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw(Mac)。你可以用以下方法估算速率:
- 终端 A:启动拉取:
docker pull ubuntu:22.04 - 终端 B:持续统计临时文件增长(Linux 示例):
watch -n1 'sudo ls -l /var/lib/docker/tmp/* | awk '{sum += $5} END {printf "Total downloaded: %.2f MB\n", sum/1024/1024}'' - 配合
date +%s.%N手动记录时间点,两次采样相减即可算出平均 MB/s - 注意:该路径在新版 Docker Desktop(Mac/Win)中不可直接访问,需改用
docker system df -v观察构建缓存增长趋势作为替代参考
用 docker events 辅助定位当前活跃 layer
虽然 docker events 不提供速率,但它能告诉你哪一层正在被拉取,结合时间戳可辅助判断是否卡顿:
- 新开终端执行:
docker events --filter event=pull --format '{{.Time}} {{.Status}} {{.ID}}' - 另一终端执行
docker pull redis:7 - 你会看到类似输出:
2026-07-20T21:28:03.123456789Z pulling fs layer sha256:aa...<br> 2026-07-20T21:28:05.987654321Z downloading sha256:aa...<br> 2026-07-20T21:28:12.456789012Z download complete sha256:aa... - 若某层的 “downloading” 状态持续超 30 秒无进展,基本可判定该层下载异常缓慢或中断


















