在 windows11 中安装了 WSL 2 ( Ubuntu ),安装了 docker 后,死活没法 pull image 。
docker-compose up Pulling db (mysql:8.0)... ERROR: Get "https://registry-1.docker.io/v2/": context deadline exceeded
尝试过的方法:
麻了,有没大佬知道应该怎么解决这个问题呀。
最终在众多留言大佬的帮助下,终于解决了这个问题。
在 WSL 的 ~/.bashrc
加入如下内容:
export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*') export https_proxy="http://${hostip}:7890" export http_proxy="http://${hostip}:7890"
刷新 source ~/.bashrc
编辑 /etc/resolv.conf
,使用如下:
nameserver 8.8.8.8
另外,宿主机(我的window11)使用 clash verge,开启虚拟网卡模式,用的是默认配置。(一开始我还不懂网友们说的 TUN 是什么,直到点击虚拟网卡模式的设置,才看到)
很坑的是,这个 /etc/resolv.conf 每次重启 WSL 后又会恢复默认配置……
![]() | 2 8820670 82 天前 via Android op 是很久没有用 docker 了吗 dockerhub 以及大的镜像站都被墙很久了 |
![]() | 3 zypdominate1 OP @dcsuibian 还是不行,不知道是不是我配置的有问题,我是在自己个人电脑上使用的。代理的地址要怎么配置才好,对代理不太懂。 ``` cat http-proxy.conf [Service] EnvirOnment="HTTP_PROXY=http://192.168.1.100:8080" # HTTP 代理 EnvirOnment="HTTPS_PROXY=http://192.168.1.100:8080" # HTTPS 代理 EnvirOnment="NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,.internal" # 直连的地址 mag@Mag:/etc/systemd/system/docker.service.d$ cd - /home/mag/tools/mysql-docker mag@Mag:~/tools/mysql-docker$ sudo systemctl daemon-reload mag@Mag:~/tools/mysql-docker$ sudo systemctl restart docker mag@Mag:~/tools/mysql-docker$ docker-compose up Pulling db (mysql:8.0)... ERROR: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: dial tcp 192.168.1.100:8080: connect: no route to host docker run hello-world Unable to find image 'hello-world:latest' locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: dial tcp 192.168.1.100:8080: connect: no route to host ``` |
4 capric 82 天前 代理要用 wsl 宿主的 ip ,不是 192 的 ip ,可以用 ip route show | grep -i default | awk '{ print $3}'获取,参照文档 https://learn.microsoft.com/en-us/windows/wsl/networking |
5 zed1018 82 天前 代理如果是在 win 上,直接用 localhost+端口就行了,可以先用 nc 测试一下 |
6 dcsuibian 82 天前 ![]() @zypdominate1 如果你用的是 clash 的话,那端口一般是 789x 什么的。要开启允许局域网连接, |
![]() | 7 Lemonadeccc 82 天前 如果是在自己 win 上,梯子开 tun 就行 |
![]() | 8 Mar5 82 天前 建议搞了透明代理,省的配置这个配置那个。 |
![]() | 9 zypdominate1 OP @Lemonadeccc win 上的梯子开代理,在 wsl 中也没法 pull image 。总之,都试过了,累了 |
![]() | 10 zypdominate1 OP @capric 貌似不支持代理? wsl -d Ubuntu hostname -I wsl: 检测到 localhost 代理配置,但未镜像到 WSL 。NAT 模式下的 WSL 不支持 localhost 代理。 172.20.107.81 172.17.0.1 172.18.0.1 |
![]() | 11 tt0411 81 天前 试试国内镜像加速吧, 网上有很多, 比如 https://cloud.tencent.com/developer/article/2485043 |
12 daisyfloor 81 天前 ![]() - wsl2 配置里网络改为 mirror 模式: networkingMode=mirrored - windows 上代理软件使用 tun 模式: 并开启严格路由 strict-route: true , 且 tun 的 mtu 改为 1500 这样配置后,在可靠的 TUN 网络下,wsl2 自己(如 apt update 或者 curl )和 docker 引擎(如镜像拉取,容器网络请求)都可以正常无感知使用代理。 |
![]() | 13 labubu 81 天前 v2rayn 开 tun 模式亲测可行 |
![]() | 14 Xheldon 81 天前 你需要修改 wslconfig ,网上有教程,后两项关了就可 |
![]() | 15 YaakovZiv 81 天前 Linux 系统使用 docker 可以直接白嫖免费的,谷歌搜索关键词"xuanyuan docker"或者"1ms docker" |
16 hefish 81 天前 我是直接在路由器上开了个梯子。。。 如果是外面的服务器,国内的,就开个代理指向家里的梯子,如果是国外的就直接 docker pull |
17 laminux29 81 天前 1. Docker 是原生于 Linux 的系统,不要在 Windows 上用 docker ,不然发生任何问题都不奇怪。推荐使用 Debian 12 系统。 2.请不要使用机场,机场是合租性质,不稳定。一定要买带有 CN2 线路优化的大厂海外 VPS ,比机场稳太多。 3.使用诸如 xShell 之类的 SSH 工具连接 VPS ,并启用 socks 隧道功能。然后去 github 搜 socks 转 http 的小程序,把 socks 隧道转换为 http 隧道。最后编辑 docker 的配置文件: /etc/systemd/system/multi-user.target.wants/docker.service 在 [Service] 节点下加入: EnvirOnment="HTTP_PROXY=http://socks 转 http 程序所在服务器的 IP:端口/" EnvirOnment="HTTPS_PROXY=http://socks 转 http 程序所在服务器的 IP:端口/" EnvirOnment="NO_PROXY=localhost,10.0.0.0/8,127.0.0.0/8,172.16.0.0/16,192.168.0.0/16" 最后 systemctl daemon-reload systemctl restart docker 重启 docker 服务就行了。 |
18 triptipstop 81 天前 用 docker-desktop 很舒服 就是得把 扩展 插件 AI 什么的全关了 不然一升级就坑 |
![]() | 19 SenLief 81 天前 docker run hello-world Unable to find image 'hello-world:latest' locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: dial tcp 192.168.1.100:8080: connect: no route to host 没有连上代理,建议直接宿主机 tun |
![]() | 20 fakecoder 81 天前 我是 wsl2 安装了 clash,op 可以试试... |
![]() | 21 chaleaochexist 81 天前 1. wsl 配置镜像网络 2. 科学上网, 虚拟网卡模式 如果是代理模式, 那就走代理. |
![]() | 22 zaunist 81 天前 https://note.qidong.name/2020/05/docker-proxy/ 楼主看下这篇文章吧,docker 在不同使用条件下的代理配置,根据你的信息来看,你只是想拉取镜像,那么我的建议是找个镜像站,添加到 daemon.json 里就行了,至于什么 NAT 、TUN 啥的,都不必折腾,最省事的办法就是找个镜像站。 |
![]() | 23 gray0 81 天前 ![]() 在 wsl2 中,使用主机的 clash 代理,在本地~/.zshrc 或 ~/.bashrc 加入如下内容: export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*') export https_proxy="http://${hostip}:7890" export http_proxy="http://${hostip}:7890" |
24 szguan 81 天前 ## .wslconfig 中: ``` networkingMode=mirrored autoProxy=true ``` ## wsl2 中 /etc/wsl.conf ``` [network] generateResolvCOnf= false ``` ## wsl2 中 /etc/resolv.conf ``` nameserver 8.8.8.8 ``` ## 添加代理设置: sudo nano ~/.bashrc ``` # 使用主机地址( WSL2 镜像网络) export hostip=127.0.0.1 export hostport=7890 (替换为主机代理端口) # HTTP/HTTPS 代理(常用程序使用) export http_proxy="http://${hostip}:${hostport}" export https_proxy="http://${hostip}:${hostport}" export HTTP_PROXY="$http_proxy" export HTTPS_PROXY="$https_proxy" # SOCKS5 代理(部分支持 SOCKS5 的工具可使用) export all_proxy="socks5h://${hostip}:${hostport}" export ALL_PROXY="$all_proxy" # 排除内网和本地地址不走代理 export no_proxy="localhost.0.0.1,::1,*.local.*.*.168.*" export NO_PROXY="$no_proxy" # proxychains4 命令别名(适用于需要强制 SOCKS 的程序) alias pwget="proxychains4 wget" alias pcurl="proxychains4 curl" ``` ## 使配置生效 `source ~/.bashrc` |
![]() |