# Stage 1: Build FROM golang:1.25.5-alpine AS builder RUN apk add --no-cache tzdata WORKDIR /app ENV GOPROXY=https://goproxy.cn,direct ENV GOSUMDB=off # 1. 先拷贝并下载依赖(利用 Docker 层缓存) COPY go.mod go.sum ./ RUN go mod download # 2. 拷贝源代码和环境配置文件 COPY . . # 3. 正确使用 BuildKit 缓存挂载(必须将 --mount 和 go build 放在同一行 RUN 中) # 这样即便代码变了,/root/.cache/go-build 下的增量编译结果依然会被复用 RUN --mount=type=cache,target=/go/pkg/mod \ --mount=type=cache,target=/root/.cache/go-build \ CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main . # Stage 2: Run FROM alpine:latest AS runner # 安装必要的依赖 RUN apk --no-cache add ca-certificates tzdata # 设置时区为东八区 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone WORKDIR /app # 复制二进制文件和环境配置文件 COPY --from=builder /app/main . COPY --from=builder /app/.env .env # 设置环境变量默认值 ENV SERVER_PORT=6555 EXPOSE 6555 CMD ["./main"]