sudo docker pull rustfs/rustfs
Using default tag: latest
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)
群晖 DSM 7 + Container Manager Docker Registry 无法访问解决方案
核心结论
在当前网络环境下,Docker 或 Container Manager 若要正常拉取镜像,配置 HTTP/HTTPS 代理是唯一可行方案。
问题分析
1. Docker 服务本身正常
dockerd.json已正确生效docker system info能看到Registry Mirrors- Container Manager 服务运行正常
2. DNS 解析受限
- 能 ping 通公共 IP(如 223.5.5.5)
- 但域名解析失败
- 修改公共 DNS 无效
3. 国际出口 HTTPS 被阻断
curl https://registry-1.docker.io超时- 直接访问 Docker Hub IP 也超时
4. 镜像源并非万能
即使配置了国内 mirror:
- mirror 域名本身也需要 DNS 解析
- 部分步骤仍会回源校验
- 在网络受限情况下依然无法使用
网络环境画像
这是一个典型的受控网络环境:
- 能访问部分国内地址
- 不允许直接访问国际 HTTPS
- 不允许自由 DNS 查询
在此类网络中,所有直连方案都会失败。
解决方案:配置系统级代理
Docker 需要可用的 HTTPS 出口以访问 Docker Hub 并完成 TLS 握手。通过代理统一出网是稳定路径。
1. 创建 systemd override
执行以下命令编辑服务配置:
systemctl edit pkg-ContainerManager-dockerd.service
在编辑器中写入以下内容(假设代理地址为 192.168.1.2:7890):
[Service]
Environment="HTTP_PROXY=http://192.168.1.2:7890"
Environment="HTTPS_PROXY=http://192.168.1.2:7890"
Environment="NO_PROXY=localhost,127.0.0.1,::1,192.168.0.0/16"
2. 重启 Docker 服务
重新加载配置并重启服务:
systemctl daemon-reexec
systemctl restart pkg-ContainerManager-dockerd.service
经验总结
在受控网络环境下排查 Docker 问题时,若出现 Client.Timeout exceeded、域名解析异常或 Docker Hub 直连失败,建议直接配置代理,而非继续尝试更换镜像源。这是效率最高且最稳定的做法。
这不是 Docker 或 NAS 的问题,而是网络边界限制导致的结果。

