目录

目录

关于WSL的代理问题一则

目录

今天在使用wsl的docker build拉取镜像时,报错:

ERROR: failed to solve: alpine: failed to resolve source metadata for docker.io/library/alpine:latest: failed to do request: Head "https://registry-1.docker.io/v2/library/alpine/manifests/latest": proxyconnect tcp: dial tcp 127.0.0.1:7890: connect: connection refused

即使关闭了代理,仍然报这个错误。于是各种检查,到底是在哪设置的代理。

首先检查环境变量:

echo $http_proxy
echo $https_proxy

确认没有设置环境变量。

然后检查配置文件:

sudo cat /etc/docker/daemon.json

因为使用的是Docker Desktop for Windows,所以并没有这个文件,也没有配置代理。

检查 WinHTTP 代理设置,也没有设置。

PS C:\Users\admin> netsh winhttp show proxy

当前的 WinHTTP 代理服务器设置:

    直接访问(没有代理服务器)

尝试禁用BuildKit,依然报错:

export DOCKER_BUILDKIT=0
docker build .

DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
            BuildKit is currently disabled; enable it by removing the DOCKER_BUILDKIT=0
            environment-variable.

Sending build context to Docker daemon  4.316MB
Step 1/29 : FROM node:20.19.1-bookworm AS front
Get "https://registry-1.docker.io/v2/": proxyconnect tcp: dial tcp 127.0.0.1:7890: connect: connection refused

检查/etc/resolv.conf,一切正常:

cat /etc/resolv.conf
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 10.255.255.254

检查%USERPROFILE%\.wslconfig,终于找到了问题:

cat ~/.wslconfig
[experimental]
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true

这是之前将wsl的网络模式由NAT改为镜像模式,顺手复制粘贴的配置。其中autoProxy=true表示 WSL 会自动继承 Windows 的代理设置。在windows运行的clash会在127.0.0.1:7890 启动本地 HTTP 代理服务。WSL 检测到这个代理后,就会把所有网络请求都转发到这个地址,即使代理没运行,它也会尝试连接。这就是为什么在windows关了代理仍在wsl仍会尝试连接7890端口。将其修改未false后问题解决。


虽然docker默认使用代理的问题解决了,但docker build不可以的问题依然存在。一下是一些可供参考的内容。

Help on “ERROR [internal] load metadata for docker.io/library/node:18-alpine” https://stackoverflow.com/questions/73812700/docker-error-internal-load-metadata-for-docker-io can’t docker pull images from China

可行的解决方案大概有

  • docker logout docker login重新登录
  • docker pull手动拉取镜像
  • export DOCKER_BUILDKIT=0禁用buildkit
  • 设置镜像站等