You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RancherDesktop集群Docker构建时go mod download出现lame referral错误

Rancher Desktop Docker构建中go mod download的lame referral错误解决方法

问题描述

在Rancher Desktop集群执行Docker构建时,RUN go mod download步骤频繁出现DNS解析的lame referral错误,偶尔成功但大多在30秒后失败。企业VPN环境下本地直接执行go mod download正常,但Docker构建容器内无法正常拉取Golang依赖。

错误信息示例:

...
=> CACHED [builder 4/7] COPY go.sum go.mod Makefile /app/                                                                                              0.0s
=> ERROR [builder 5/7] RUN go mod download                                                                                                            18.5s
------
 > [builder 5/7] RUN go mod download:
#12 17.98 go mod download: github.com/aws/aws-sdk-go@v1.44.13: Get "https://storage.googleapis.com/proxy-golang-org-prod/6d16f241873ba42e-github.com:aws:aws-sdk-go-v1.44.13.zip?Expires=x&GoogleAccessId=gcs-urlsigner-prod%40golang-modproxy.iam.gserviceaccount.com&Signature=x": dial tcp: lookup storage.googleapis.com on 192.168.x.x:53: lame referral
...
------
executor failed running [/bin/sh -c go mod download]: exit code: 1

用户原Dockerfile:

FROM golang:1.16.4-buster AS builder
ENV GOOS=linux GOARCH=amd64 CGO_ENABLED=1 GOPRIVATE="github.com/x"
ARG GITHUB_ACCESS_TOKEN

RUN mkdir -p -m 0600 /root/.ssh && \
  ssh-keyscan github.com >> ~/.ssh/known_hosts && \
  git config --global url."https://${GITHUB_ACCESS_TOKEN}:@github.com/".insteadOf "https://github.com/"

# separate for better caching purpose
WORKDIR /app
COPY go.sum go.mod Makefile /app/
RUN go mod download
COPY . .
RUN make install && make build
...

解决方法

1. 修复DNS解析问题

lame referral错误本质是DNS服务器返回了无效的referral记录,导致容器无法正确解析域名。解决思路是让Docker构建容器使用企业VPN的DNS服务器,而非Rancher Desktop默认的DNS。

  • 临时构建时指定DNS:
    在docker build命令中添加--dns参数,替换为你的企业DNS服务器IP:

    docker build --dns 10.x.x.x --build-arg GITHUB_ACCESS_TOKEN=your_token .
    
  • 永久修改Rancher Desktop DNS配置:
    打开Rancher Desktop设置 → Kubernetes → 找到"DNS"选项,选择"Custom DNS"并输入企业DNS服务器地址,保存后重启Rancher Desktop。

2. 配置Docker构建代理

本地VPN下能正常拉取依赖,说明代理配置有效,但Docker构建容器未继承代理环境变量。可通过以下两种方式配置:

  • 构建命令传递代理参数:

    docker build \
      --build-arg HTTP_PROXY=http://your-proxy:port \
      --build-arg HTTPS_PROXY=http://your-proxy:port \
      --build-arg NO_PROXY=localhost,127.0.0.1,github.com,storage.googleapis.com \
      --build-arg GITHUB_ACCESS_TOKEN=your_token .
    
  • 在Dockerfile中添加代理环境变量:
    修改Dockerfile,在FROM之后添加代理相关的ARG和ENV,让容器继承代理配置:

    FROM golang:1.16.4-buster AS builder
    ENV GOOS=linux GOARCH=amd64 CGO_ENABLED=1 GOPRIVATE="github.com/x"
    ARG GITHUB_ACCESS_TOKEN
    # 添加代理参数
    ARG HTTP_PROXY
    ARG HTTPS_PROXY
    ARG NO_PROXY
    ENV HTTP_PROXY=${HTTP_PROXY}
    ENV HTTPS_PROXY=${HTTPS_PROXY}
    ENV NO_PROXY=${NO_PROXY}
    
    RUN mkdir -p -m 0600 /root/.ssh && \
      ssh-keyscan github.com >> ~/.ssh/known_hosts && \
      git config --global url."https://${GITHUB_ACCESS_TOKEN}:@github.com/".insteadOf "https://github.com/"
    
    WORKDIR /app
    COPY go.sum go.mod Makefile /app/
    RUN go mod download
    COPY . .
    RUN make install && make build
    ...
    

3. 调整GOPROXY配置

默认的proxy.golang.org可能在企业VPN下访问不稳定,可切换到国内公共代理或企业内部Go代理,甚至直接从源拉取:

在Dockerfile的ENV中添加GOPROXY配置:

ENV GOOS=linux GOARCH=amd64 CGO_ENABLED=1 GOPRIVATE="github.com/x" GOPROXY=https://goproxy.io,direct
  • https://goproxy.io是国内公共Go代理,可替换为企业内部代理地址;
  • direct表示私有仓库(通过GOPRIVATE指定的)直接从源拉取,不走代理。

4. 验证容器内网络连通性

如果问题仍存在,可临时在Dockerfile中添加网络测试命令,定位具体连通问题:

WORKDIR /app
COPY go.sum go.mod Makefile /app/
# 添加测试命令
RUN nslookup storage.googleapis.com
RUN curl -I https://storage.googleapis.com
RUN go mod download

构建时观察测试命令的输出,确认是否能正常解析域名和访问目标地址。

内容的提问来源于stack exchange,提问作者Jay Bouck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:30:58