Docker pull 镜像超时报错 net/http 请求取消如何配置加速器

文章导读
遇到 Docker pull 超时报错,最稳妥的处理是修改 daemon.json 配置 registry-mirrors 镜像加速地址,并重启 Docker 服务。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

遇到 Docker pull 超时报错,最稳妥的处理是修改 daemon.json 配置 registry-mirrors 镜像加速地址,并重启 Docker 服务。

先说结论:配置镜像加速器是解决拉取超时最常见的方法,但需确保地址可用

  • 先确认:检查当前 Docker 配置和网络连通性
  • 先处理:编写正确的 daemon.json 配置文件
  • 再验证:重启服务后查看 Registry Mirrors 状态

命令速用版

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://your-mirror-id.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

注意:上述命令中的镜像地址需替换为你实际申请的地址,公开资料中没有看到可靠的量化数据表明哪个地址永久有效,建议从云服务商控制台获取。

为什么会这样

报错 net/http: request canceled 通常表示 Docker 客户端在等待镜像层下载时,连接长时间无响应导致超时。

Docker Hub 官方仓库服务器位于海外,国内访问时常因网络波动或带宽限制出现连接重置或延迟过高。配置加速器本质是让 Docker 请求先经过国内中转节点,减少跨国链路的不稳定性。

分步处理

1. 备份现有配置

如果 /etc/docker/daemon.json 已存在,先备份以防配置错误导致服务无法启动。

sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak

2. 编辑配置文件

Docker pull 镜像超时报错 net/http 请求取消如何配置加速器

使用编辑器打开文件,确保 JSON 格式正确。如果文件为空,直接写入;如果已有内容,需在现有 JSON 对象中增加 registry-mirrors 字段,注意逗号分隔。

sudo vim /etc/docker/daemon.json

示例内容:

{
  "registry-mirrors": [
    "https://your-mirror-id.mirror.aliyuncs.com"
  ]
}

3. 重载并重启服务

配置修改后必须重载 systemd 配置并重启 Docker 才能生效。

sudo systemctl daemon-reload
sudo systemctl restart docker

怎么验证是否生效

使用 docker info 命令查看输出中是否包含配置后的镜像地址。

docker info | grep -A 5 "Registry Mirrors"

如果列表中出现你配置的地址,说明配置已加载。随后尝试拉取一个小型镜像测试速度:

docker pull hello-world

常见坑

  • JSON 语法错误: 多一个逗号或少一个括号都会导致 Docker 服务启动失败,修改前务必检查格式。
  • 配置覆盖: 直接写入文件可能覆盖原有配置(如日志驱动、存储路径),需合并原有内容。
  • 地址失效: 镜像加速地址可能会变动,如果配置后依然超时,需更换地址或检查本地 DNS。
  • 服务启动失败: 如果重启失败,查看状态 systemctl status docker,必要时还原备份文件。

参考来源

  • Docker Official Documentation, "Configure the Docker daemon", https://docs.docker.com/engine/daemon/
  • Alibaba Cloud Documentation, "容器镜像服务 ACMR 镜像加速器", https://help.aliyun.com/product/29977.html (页面结构可能调整,以控制台实际显示为准)