ARG GO_BUILDER_IMAGE=docker.m.daocloud.io/library/golang:1.26-alpine ARG BACKEND_RUNTIME_IMAGE=docker.m.daocloud.io/library/alpine:3.22 ARG GOPROXY=https://goproxy.cn,direct ARG GOSUMDB=sum.golang.google.cn ARG ALPINE_MIRROR=https://mirrors.aliyun.com/alpine FROM ${GO_BUILDER_IMAGE} AS builder ARG GOPROXY ARG GOSUMDB ENV GOPROXY=${GOPROXY} ENV GOSUMDB=${GOSUMDB} WORKDIR /app # 复制 Go 依赖文件 / Copy Go dependency files COPY backend/go.mod backend/go.sum ./ RUN go mod download COPY backend ./backend WORKDIR /app/backend # 构建 Go 二进制文件 / Build Go binary RUN CGO_ENABLED=0 GOOS=linux go build -o /server ./cmd/server # 最终运行镜像 / Runtime image FROM ${BACKEND_RUNTIME_IMAGE} ARG ALPINE_MIRROR ENV TZ=Asia/Shanghai RUN sed -i "s|https://dl-cdn.alpinelinux.org/alpine|${ALPINE_MIRROR}|g; s|http://dl-cdn.alpinelinux.org/alpine|${ALPINE_MIRROR}|g" /etc/apk/repositories \ && apk --no-cache add ca-certificates tzdata curl \ && ln -snf "/usr/share/zoneinfo/${TZ}" /etc/localtime \ && echo "${TZ}" >/etc/timezone WORKDIR /app COPY --from=builder /server ./server # 暴露服务端口 / Expose service port EXPOSE 8080 # 启动服务 / Run server CMD ["./server"]