FROM golang:1.23-alpine AS builder ARG GOPROXY=https://proxy.golang.org,direct ARG HTTP_PROXY ARG HTTPS_PROXY ARG NO_PROXY ARG http_proxy ARG https_proxy ARG no_proxy ENV GOPROXY=${GOPROXY} \ HTTP_PROXY=${HTTP_PROXY} \ HTTPS_PROXY=${HTTPS_PROXY} \ NO_PROXY=${NO_PROXY} \ http_proxy=${http_proxy} \ https_proxy=${https_proxy} \ no_proxy=${no_proxy} WORKDIR /src COPY go.mod go.sum* ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o /out/app ./cmd/app \ && CGO_ENABLED=0 GOOS=linux go build -o /out/backfill ./cmd/backfill FROM alpine:3.20 # wget 用于容器 healthcheck;ca-certificates 用于 TLS;tzdata 用于本地时区 RUN apk add --no-cache ca-certificates tzdata wget WORKDIR /app COPY --from=builder /out/app /app/app COPY --from=builder /out/backfill /app/backfill EXPOSE 8080 # 容器级 healthcheck:拒绝把 unhealthy 容器纳入负载均衡 HEALTHCHECK --interval=15s --timeout=3s --start-period=20s --retries=3 \ CMD wget --spider -q http://127.0.0.1:8080/v1/health || exit 1 ENTRYPOINT ["/app/app"]