Colima 下 docker pull 失败自查流程

macOS + Colima 下 docker pull 超时问题排查总结

一、问题现象

在 macOS 上使用 colima 运行 Docker service 时,执行:

bash 复制代码
docker pull BALABALA

报错:

text 复制代码
Error response from daemon:
Get "https://registry-1.docker.io/v2/":
net/http: request canceled while waiting for connection
(Client.Timeout exceeded while awaiting headers)

二、核心结论(先给答案)

Docker daemon 无法直连 Docker Hub,必须通过代理访问,但 daemon 并没有正确使用代理配置

shell / curl 能走代理 ≠ Docker daemon 会走代理

必须通过 systemd 给 Docker daemon 显式配置代理。


三、完整排查思路

1️⃣ 确认是否是网络问题,而非镜像本身

bash 复制代码
docker pull hello-world
  • 同样超时 → 不是镜像名问题,而是 Docker 出网问题

2️⃣ 进入 Colima VM,直接测试网络

bash 复制代码
colima ssh
DNS 测试(正常)
bash 复制代码
getent hosts registry-1.docker.io
# 也可以 nslookup

→ 能解析到 IP,说明 DNS 正常

HTTPS 连通性测试(关键)
bash 复制代码
curl -Iv https://registry-1.docker.io/v2/

输出显示:

text 复制代码
Uses proxy env variable https_proxy == 'http://PROXY_INFO_HERE'
CONNECT registry-1.docker.io:443

→ curl 在 通过代理访问 Docker Hub


3️⃣ 判断:是否"必须走代理"

清空所有代理变量,强制直连:

bash 复制代码
env -u https_proxy -u http_proxy -u all_proxy -u no_proxy \
    -u HTTPS_PROXY -u HTTP_PROXY -u ALL_PROXY -u NO_PROXY \
    curl -Iv https://registry-1.docker.io/v2/ --max-time 15

结果:

text 复制代码
Connection timed out

✅ 结论明确:

直连 Docker Hub 会超时,必须通过代理访问


4️⃣ 问题根因定位

查看 VM 内环境变量:

bash 复制代码
env | egrep -i "https?_proxy|all_proxy|no_proxy"
text 复制代码
HTTPS_PROXY=http://HERE
https_proxy=http://ARE
http_proxy=http://MY
HTTP_PROXY=http://PROXY

➡️ Shell / curl 有代理

⚠️ 但 Docker daemon 并不会自动继承这些环境变量


四、最终解决方案(关键步骤)

✅ 通过 systemd 给 Docker daemon 固化代理配置

bash 复制代码
colima ssh
sudo mkdir -p /etc/systemd/system/docker.service.d

创建代理配置:

bash 复制代码
sudo tee /etc/systemd/system/docker.service.d/proxy.conf >/dev/null <<'EOF'
[Service]
Environment="HTTP_PROXY=http://PROXY"
Environment="HTTPS_PROXY=http://HERE"
Environment="NO_PROXY=localhost,127.0.0.1"
EOF

让 systemd 重新加载并重启 Docker:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker
exit

✅ 验证配置是否生效

bash 复制代码
colima ssh -- systemctl show docker -p Environment

确认能看到:

text 复制代码
Environment=HTTP_PROXY=... HTTPS_PROXY=...

✅ 最终验证

bash 复制代码
docker pull sean908/THE_IMAGE_YOU_NEED

🎉 拉取成功,问题解决


五、关键经验总结(非常重要)

1️⃣ macOS 上的代理 ≠ Colima VM 的代理

2️⃣ Shell 的代理 ≠ Docker daemon 的代理

3️⃣ Docker daemon 必须用 systemd 显式配置代理

4️⃣ 排查顺序永远是:

DNS → 直连 → 代理 → daemon 是否真正使用代理


六、TL;DR

在 Colima / Lima / Linux VM 中,docker pull 超时,90% 是 Docker daemon 没正确走代理;curl 能通不代表 docker 能通。

相关推荐
国科安芯9 小时前
核电站仪控与监测系统中抗辐射 MCU 芯片应用研究
单片机·嵌入式硬件·macos·无人机·cocos2d·核电站
运维全栈笔记10 小时前
K8S部署Redis高可用全攻略:1主2从3哨兵架构实战
redis·docker·云原生·容器·架构·kubernetes·bootstrap
@大迁世界10 小时前
14个你现在必须关闭的 iOS 26 设置,不然手机很快被它榨干
macos·ios·智能手机·objective-c·cocoa
健忘的萝卜10 小时前
Clawdbot 爆红硅谷,也把 AI Agent 和 Mac mini 推上风口
人工智能·macos·agent·数字员工·clawbot
SCBAiotAigc12 小时前
2026.5.1:`DockerDesktop must be owned by an elevated account`错误的解决办法
人工智能·docker·具身智能
AI木马人12 小时前
9.人工智能实战:GPU 服务如何上 Kubernetes?从单机部署到 K8s + NVIDIA Device Plugin + HPA 的生产级改造
人工智能·容器·kubernetes
身如柳絮随风扬19 小时前
使用 Docker 部署禅道并实现自动化部署——从项目搭建到运维自动化的完整指南
运维·docker·自动化
HashFlag19 小时前
Mac新机基础配置
macos
eRTE XFUN20 小时前
docker下搭建redis集群
redis·docker·容器
一只小bit20 小时前
Docker 存储卷:本地文件与容器内部文件建立绑定关系
运维·docker·容器