FROM golang:1.21-alpine AS builder ENV CGO_ENABLED=0 ENV GO111MODULE=on ENV GOPROXY=https://goproxy.cn,direct RUN apk add --no-cache git tzdata WORKDIR /app # 复制 go.work 文件(用于工作区配置,必须在项目根目录) COPY go.work go.work.sum* ./ # 复制 server 模块的依赖文件(先复制依赖文件以利用 Docker 缓存) COPY server/go.mod server/go.sum ./server/ WORKDIR /app/server RUN go mod download # 复制 grpc/user/userv1 模块的依赖文件 WORKDIR /app COPY grpc/user/userv1/go.mod grpc/user/userv1/go.sum ./grpc/user/userv1/ WORKDIR /app/grpc/user/userv1 RUN go mod download # 复制所有源代码(包括生成的 proto 文件) # 注意:必须在 go.work 所在的目录下构建,才能正确识别工作区 WORKDIR /app COPY server/ ./server/ COPY grpc/user/userv1/ ./grpc/user/userv1/ # 构建应用(在项目根目录,go.work 会自动生效) WORKDIR /app/server RUN go build -o /out/server ./cmd/server/main.go FROM alpine:3.19 RUN apk add --no-cache tzdata ca-certificates curl bash WORKDIR /app COPY --from=builder /out/server /app/server EXPOSE 8077 ENTRYPOINT ["/app/server"]