Docker pull 出现 connect connection timed out 通常是因为本地网络无法稳定连接 Docker Hub 官方仓库。特别是在国内网络环境下,直接连接官方源极易超时。最有效的解决方案是配置 registry-mirrors 镜像加速,或在 daemon 中设置代理。
先说结论:多数情况是网络链路问题,优先检查 DNS 和镜像源配置,必要时通过 daemon 代理解决。
- 先确认:本地能否解析 registry-1.docker.io 域名
- 先处理:配置 daemon.json 添加镜像加速或代理地址(操作前务必备份)
- 再验证:重启服务后执行 pull 命令观察日志
背景与现状
Docker 拉取镜像时需要连接官方仓库 registry-1.docker.io。如果本地 DNS 解析慢、网络链路拥塞或者防火墙拦截,就会建立连接超时。这不是 Docker 软件本身的故障,而是网络可达性问题。近期国内访问 Docker Hub 稳定性波动较大,公共镜像源可能随时不可用,建议优先使用云厂商提供的专属加速地址。
操作前备份
修改配置文件前务必备份,防止格式错误导致 Docker 服务无法启动。
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak如果服务启动失败,可通过 sudo cp /etc/docker/daemon.json.bak /etc/docker/daemon.json 快速恢复。
配置镜像加速
编辑 /etc/docker/daemon.json,添加 registry-mirrors 字段。由于公共镜像源稳定性不一,建议登录阿里云、腾讯云等容器控制台获取专属加速地址。
{
"registry-mirrors": [
"https://your-exclusive-id.mirror.aliyuncs.com"
]
}如果没有该文件,新建即可;如果已有内容,注意 JSON 格式逗号不要遗漏。修改后建议校验 JSON 语法:
python -m json.tool /etc/docker/daemon.json若输出格式化后的 JSON 而无报错,说明语法正确。
配置代理(备选)
如果处于企业内网,需要走 HTTP 代理,创建或编辑 /etc/systemd/system/docker.service.d/http-proxy.conf:
[Service]
Environment="HTTP_PROXY=http://proxy-ip:port"
Environment="HTTPS_PROXY=https://proxy-ip:port"生效与验证
配置修改后必须重载 systemd 并重启 docker 服务才能生效。
sudo systemctl daemon-reload
sudo systemctl restart docker执行 docker info 查看 Registry Mirrors 字段是否包含你配置的地址。然后尝试拉取一个小镜像:
docker pull hello-world观察输出日志,如果显示 Pulling from library/hello-world 且最终 Downloaded newer image,说明成功。
故障排查与恢复
- JSON 格式错误:配置文件多一个逗号或少一个括号都会导致 docker 服务启动失败。若重启失败,立即还原备份文件。
- 配置未重载:修改了 systemd 配置后忘记执行 daemon-reload,重启无效。
- 镜像源失效:公共镜像源可能随时不可用,建议优先使用自己所属云厂商的内网源或专属加速地址。
- 代理地址错误:代理配置中的 IP 和端口必须确保本地网络可通达。