为何配置了GOPROXY却莫名其妙无效?

2 篇文章 0 订阅

前言

今天遇到了一个很奇怪的问题,我已经通过

go env -w GOPROXY=https://goproxy.cn,direct

配置了代理,但是在docker build镜像时,在下载依赖环节,一直提示访问https://proxy.golang.org/超时,明明已经配置了代理,为何?

思考中……

我的Dockerfile是这样子

# 基于go基础镜像构建
FROM golang:latest as builder

# 维护者信息
LABEL maintainer="JoyCode <JoyCoding@qq.com>"

# 设置容器内部的工作目录
WORKDIR /app

# 拷贝  go mod 和 sum 文件
COPY go.mod go.sum ./

# 根据go mod下载依赖
RUN go mod download

# 从当前目录拷贝到容器工作目录
COPY . .

# build go应用
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .


######## alpine镜像 #######
FROM alpine:latest

# 该镜像详细可参考:https://golang-tech-stack.com/post/5751

# 运行包管理
RUN apk --no-cache add ca-certificates

# 工作目录
WORKDIR /Users/flying/docker/go-k8s/

# 从前面的stage拷贝预编译的二进制文件
COPY --from=builder /app/main .

# 暴露端口
EXPOSE 8080

# 执行命令
CMD ["./main"]

然后执行

docker build -t go-k8s .

构建镜像到RUN go mod download 这一步,就提示访问https://proxy.golang.org/超时,于是执行go env,如下

image-20230322101812262

为何不生效?这个时候我想到了可能是执行go env时的环境变量是生效的,但是当通过docker build命令执行时,用户不一样,所以环境变量相同了?很有可能!!!

试试吧

于是我在Dockerfile中RUN go mod download的前面增加了一行

RUN go env -w GOPROXY=https://goproxy.cn  # 确保执行命令时的用户环境变量是走代理
RUN go mod download

然后再次执行

docker build -t go-k8s .

等了一会儿,成功了

image-20230322104631663

总结

从上面可以看出,确实是因为执行docker build的用户对应的环境变量没有更改成功,这里的方案是行得通的。

但是可能还有更好的方案,比如说指定执行命令的用户,又或者将GOPROXY环境变量设置成全局的(所有用户都走这个环境变量),这里就先不折腾了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值