wsl 中构建 Golang 项目时网络代理引起构建卡壳的问题
问题背景和描述
Windows
系统中使用 Clash-for-Windows
作为代理应用,同时 wsl
中设置了系统代理,配置如下:
export http_proxy="http://192.168.1.3:7890/"
export https_proxy="http://192.168.1.3:7890/"
export ftp_proxy="http://192.168.1.3:7890/"
export no_proxy="127.0.0.1,localhost"
export HTTP_PROXY="http://192.168.1.3:7890/"
export HTTPS_PROXY="http://192.168.1.3:7890/"
export FTP_PROXY="http://192.168.1.3:7890/"
export NO_PROXY="127.0.0.1,localhost"
我的目标是构建 Golang
应用,涉及到的 Dockerfile
如下:
FROM golang:1.18.4 AS BACK
WORKDIR /go/src/bus
COPY . .
RUN ./build.sh
其中 build.sh
内容如下:
#!/bin/bash
#try to connect to google to determine whether user need to use proxy
curl www.google.com -o /dev/null --connect-timeout 5 2 > /dev/null
if [ $? == 0 ]
then
echo "Successfully connected to Google, no need to use Go proxy"
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o server .
else
echo "Google is blocked, Go proxy is enabled: GOPROXY=https://goproxy.cn,direct"
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GOPROXY=https://goproxy.cn,direct go build -ldflags="-w -s" -o server .
fi
此时正常构建会卡到如下步骤:
[2/3] STEP 4/4: RUN ./build.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 15157 0 15157 0 0 504 0 --:--:-- 0:00:30 --:--:-- 0
这一步几个小时都不会有好转。
解决方法
问题背景和问题描述都清楚之后,怎么解决呢?尝试过如下方法:
- 等待更长时间,但三个小时都不起效果。
- 更换 Podman,经测试同样如此。
这就很迷惑了,猜测可能是网络问题,所以经过不断尝试发现如下解决方案。
-
暂时将
Clash-for-Windows
的Allow LAN
关闭; -
执行构建命令;
-
等待出现如下日志:
[2/3] STEP 4/4: RUN ./build.sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- 0:00:05 --:--:-- 0 curl: (28) Connection timed out after 5001 milliseconds
-
打开
Clash-for-Windows
的Allow LAN
。
然后就可以正常下载项目依赖并构建了。至于为什么会出现这种状况,还需要再了解下 Docker 网络相关的内容了。