Docker构建时go mod download卡顿问题求助
解决Docker构建时
go mod download卡在filippo.io/edwards255919的问题 1. 修复GOPROXY重复设置问题
你的Dockerfile里连续两次设置GOPROXY,第二次的direct会覆盖第一次的代理地址,导致Go模块下载时没有使用代理加速。调整为单次设置有效的代理地址,比如国内的公共代理:
FROM golang:latest WORKDIR /app # 使用国内代理+direct作为 fallback ENV GOPROXY=https://goproxy.cn,direct COPY go.mod . COPY go.sum . RUN go mod download COPY . . RUN go build -o ./out/dist .
2. 采用vendor模式跳过模块下载
本地已能正常编译,说明依赖已存在本地。执行go mod vendor生成包含所有依赖的vendor目录,然后修改Dockerfile直接使用本地依赖构建:
FROM golang:latest WORKDIR /app COPY go.mod . COPY go.sum . COPY vendor ./vendor COPY . . # 指定使用vendor目录构建 RUN go build -mod=vendor -o ./out/dist .
3. 更换基础镜像或调整Docker网络
- 换成国内镜像源的Go基础镜像,比如阿里云的镜像:
FROM registry.cn-hangzhou.aliyuncs.com/google_containers/golang:latest WORKDIR /app ENV GOPROXY=https://goproxy.cn,direct COPY go.mod . COPY go.sum . RUN go mod download COPY . . RUN go build -o ./out/dist .
- 检查Docker网络连通性:在Dockerfile中添加网络测试命令,确认能否访问目标地址:
FROM golang:latest WORKDIR /app ENV GOPROXY=https://goproxy.cn,direct COPY go.mod . COPY go.sum . # 测试网络连通性 RUN ping -c 3 filippo.io && go mod download COPY . . RUN go build -o ./out/dist .
如果网络不通,修改Docker daemon的DNS配置(编辑/etc/docker/daemon.json):
{ "dns": ["8.8.8.8", "114.114.114.114"] }
修改后重启Docker服务:systemctl restart docker
内容的提问来源于stack exchange,提问作者Mohan Raj
相关产品推荐
相关产品推荐

