我使用的是 Windows + Docker Desktop + WSL。
我无法在开启系统代理的情况下拉取镜像,提示 proxyconnect tcp: dial tcp 127.0.0.1:7890: connect: connection refuse。指向了系统代理。
我进行了一些测试,详见附件 PDF。发现只能在关闭系统代理,配置 Docker Destop 镜像源的情况下才能拉取。此时再开启系统代理,也没有问题。但 Windows 会提示系统代理发生变化,需要重启 WSL。
想请教一下如何在系统代理开启的情况下,(+不配置镜像源的下?)拉取镜像。
指教了!
Docker Issue.pdf (3.8 MB)
4 个赞
你在发行版里也装了 docker 吗
按照官方文档的说明
Important
To avoid any potential conflicts with using WSL 2 on Docker Desktop, you must uninstall any previous versions of Docker Engine and CLI installed directly through Linux distributions before installing Docker Desktop.
你应该在安装 Docker Desktop 前卸载发行版中的 docker
2 个赞
是的,好像是自带的(忘记了…)我先暂时不删看看其他人的评论。
另外我从另一个帖子 小白解决docker网络问题姿势 - #6,来自 delphls 里看到了不需要配置镜像就可以,只需要全局代理即可。但我开启了全局代理后和启用了虚拟网卡,拉取镜像仍指向的是系统代理。
2 个赞
你好,是通的
➜ backend git:(main) ✗ curl -x http://127.0.0.1:7890 -I https://registry-1.docker.io/v2/
HTTP/1.1 200 Connection established
HTTP/1.1 401 Unauthorized
content-type: application/json
docker-distribution-api-version: registry/2.0
www-authenticate: Bearer realm="https://auth.docker.io/token",service="registry.docker.io"
date: Thu, 01 May 2025 08:25:15 GMT
content-length: 87
strict-transport-security: max-age=31536000
2 个赞
多谢指点。我尝试拷贝 curl 二进制文件到 wsl 中的 docker-desktop 但貌似执行不了。另外我配置了 docker-desktop 中的代理,仍然拉取不了镜像。
1 个赞
拷贝是什么鬼,我记得docker desktop 装的发行版好像是 Fedora ,dnf install curl
似乎不太行…
PS C:\Users\hiron> wsl -d docker-desktop
docker-desktop:/tmp/docker-desktop-root/run/desktop/mnt/host/c/Users/hiron# dnf install curl
-sh: dnf: not found
docker-desktop:/tmp/docker-desktop-root/run/desktop/mnt/host/c/Users/hiron# cat /etc/os-release
PRETTY_NAME="Docker Desktop"
docker-desktop:/tmp/docker-desktop-root/run/desktop/mnt/host/c/Users/hiron# lsb_release -a
-sh: lsb_release: not found
docker-desktop:/tmp/docker-desktop-root/run/desktop/mnt/host/c/Users/hiron# hostnamectl
-sh: hostnamectl: not found
docker-desktop:/tmp/docker-desktop-root/run/desktop/mnt/host/c/Users/hiron# apt
-sh: apt: not found
docker-desktop:/tmp/docker-desktop-root/run/desktop/mnt/host/c/Users/hiron# yum
-sh: yum: not found
docker-desktop:/tmp/docker-desktop-root/run/desktop/mnt/host/c/Users/hiron#
图中已执行,结果为:
PRETTY_NAME="Docker Desktop"
虽然不知道你们在干嘛,但建议把系统代理关掉,虚拟网卡开启,规则里加一条:
- DOMAIN-SUFFIX,docker.io,YOUR_PROXY
突然发现,怎么没写这个。实在不行,就 TUN 吧,最简单,也不用考虑其他
1 个赞
已解决,多谢大佬们的指点!目前配置如下:
关闭系统代理,启用虚拟网卡(之前对这块完全不了解)。不需要添加规则。
启用 docker-desktop 集成 WSL,关闭代理,不需要添加镜像。
成功拉取镜像。 
3 个赞
你这里不需要加规则,大概是因为你的配置里已经囊括了相关的 docker 规则,或者能正确解析到相关域名的 IP,但加一下规则总归是更有保障的… 有空可以维护一份自己的规则。
科普一下系统代理和虚拟网卡(TUN):
- 系统代理:应用自适应,流量是否经过代理是应用说了算,例如浏览器就必用系统代理;
- 虚拟网卡:强制大部分应用的流量经过代理。
这俩基本不需要同时启用,按需选择。最后规则模式下,应用或域名是否能使用代理服务,就是规则说了算。 