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

树莓派4+Docker Compose环境下Go mod下载依赖失败求助

问题:树莓派4上Docker Compose构建Go微服务时go mod download失败

环境与配置

Go微服务Dockerfile

# Build
FROM golang:alpine AS build

# Destination of copy
WORKDIR /build

# Download dependencies
COPY go.mod ./
COPY go.sum ./
RUN go mod download

# Copy source code
COPY . ./

# Build
RUN go build -o bin ./cmd/main.go

# Deploy
FROM alpine

RUN adduser -S -D -H -h /app appuser
USER appuser

COPY --from=build /build/bin /app/

WORKDIR /app

EXPOSE 8080

CMD ["./bin"]

Docker Compose配置(compose.yaml)

services:
  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
  postgres:
    image: postgres:alpine
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - ../loquegasto-backend/migrations/core.sql:/docker-entrypoint-initdb.d/1-core.sql
      - ../loquegasto-backend/migrations/core.categories.sql:/docker-entrypoint-initdb.d/2-core.categories.sql
      - ../loquegasto-backend/migrations/core.transactions.sql:/docker-entrypoint-initdb.d/3-core.transactions.sql
      - ../loquegasto-backend/migrations/core.users.sql:/docker-entrypoint-initdb.d/4-core.users.sql
      - ../loquegasto-backend/migrations/core.wallets.sql:/docker-entrypoint-initdb.d/5-core.wallets.sql
    healthcheck:
      test: ["CMD-SHELL", "pg_isready"]
      interval: 10s
      timeout: 5s
      retries: 3
  lqg-backend:
    build: ../loquegasto-backend
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
      - JWT_SECRET=${JWT_SECRET}
      - PORT=8080
    depends_on:
      postgres:
        condition: service_healthy
  lqg-telegram:
    build: ../loquegasto-telegram
    links:
      - "redis"
      - "lqg-backend"
    environment:
      - JWT_SECRET=${JWT_SECRET}
      - TELEGRAM_TOKEN=${TELEGRAM_TOKEN}
      - BACKEND_URL=http://lqg-backend:8080
      - EXPORTER_FILE_PATH=lqg-export
      - REDIS_HOST=redis:6379
      - PORT=8080
    depends_on:
      - redis
      - lqg-backend

问题现象

在MacOS上执行docker compose up --build -d可正常运行,但在树莓派4上执行时,多次出现go mod download步骤失败,错误示例:

> [loquegasto-infra-lqg-backend build 5/7] RUN go mod download:
#0 1.623 go: github.com/Masterminds/squirrel@v1.5.1: Get "https://proxy.golang.org/github.com/%21masterminds/squirrel/@v/v1.5.1.mod": dial tcp: lookup proxy.golang.org on [2800:810:100:1:200:115:192:28]:53: dial udp [2800:810:100:1:200:115:192:28]:53: connect: cannot assign requested address
------
failed to solve: executor failed running [/bin/sh -c go mod download]: exit code: 1

错误表现不稳定:有时单个依赖出错,有时所有依赖失败;有时其中一个微服务构建失败,有时是另一个。

解决建议

  • 禁用IPv6解析:从错误日志看是IPv6 DNS解析失败,可在Docker构建阶段强制Go使用IPv4。修改Dockerfile中的go mod download步骤:

    RUN GOFLAGS="-net=ipv4" go mod download
    

    也可以在Docker daemon层面全局禁用IPv6:编辑/etc/docker/daemon.json添加以下内容,然后重启Docker服务(sudo systemctl restart docker):

    {
      "ipv6": false,
      "fixed-cidr-v6": ""
    }
    
  • 更换Go模块代理:如果proxy.golang.org访问不稳定,可替换为更稳定的代理服务,在Dockerfile中添加环境变量后再执行下载:

    ENV GOPROXY=https://goproxy.io,direct
    RUN go mod download
    
  • 复用本地依赖缓存:在树莓派上先单独进入每个微服务目录,执行go mod download把依赖下载到本地Go缓存;然后修改Docker Compose的构建配置,挂载本地缓存到构建容器,避免重复下载:

    lqg-backend:
      build: 
        context: ../loquegasto-backend
      volumes:
        - $HOME/go/pkg/mod:/go/pkg/mod
      # 其他配置保持不变
    

    注意:需保证树莓派本地Go版本与Dockerfile中golang:alpine的Go版本一致。

  • 检查树莓派网络配置:确认树莓派的DNS服务器配置正常,可临时修改/etc/resolv.conf使用公共DNS(如8.8.8.8或114.114.114.114),测试ping proxy.golang.org是否能正常解析和连通。

内容的提问来源于stack exchange,提问作者Lucas Bacelo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:05:21