From 2d14245086081f1b503bb344a9b1a7d11db75fa5 Mon Sep 17 00:00:00 2001 From: Blizzard Date: Sat, 18 Jul 2026 15:54:35 +0800 Subject: [PATCH] =?UTF-8?q?fix(docker):=20=E8=BF=90=E8=A1=8C=E9=95=9C?= =?UTF-8?q?=E5=83=8F=20gcr.io/distroless=20=E2=86=92=20alpine(=E5=86=85?= =?UTF-8?q?=E7=BD=91=20runner=20=E8=BF=9E=E4=B8=8D=E4=B8=8A=20gcr.io)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 128 的 runner 能拉 docker.io 但连不上 gcr.io(dial 443 i/o timeout),distroless 拉不到。 三个 Go 服务运行 stage 换 alpine:3.20 + ca-certificates(TLS 连 LLM/MinIO)+ tzdata + 非 root 用户。二进制 CGO_ENABLED=0 全静态,alpine 上直接跑;本地已验证构建+启动正常。 Co-Authored-By: Claude Opus 4.8 --- sundynix-dispatcher/Dockerfile | 5 ++++- sundynix-gateway/Dockerfile | 8 ++++++-- sundynix-mcp-go/Dockerfile | 5 ++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/sundynix-dispatcher/Dockerfile b/sundynix-dispatcher/Dockerfile index ea3fdab..c6575e5 100644 --- a/sundynix-dispatcher/Dockerfile +++ b/sundynix-dispatcher/Dockerfile @@ -13,6 +13,9 @@ COPY sundynix-dispatcher/ ./sundynix-dispatcher/ WORKDIR /src/sundynix-dispatcher RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/dispatcher ./cmd/dispatcher -FROM gcr.io/distroless/static-debian12:nonroot +# alpine 运行(内网 runner 连不上 gcr.io;二进制 CGO_ENABLED=0 全静态,ca-certs 供 TLS)。 +FROM alpine:3.20 +RUN apk add --no-cache ca-certificates tzdata && adduser -D -u 10001 app +USER app COPY --from=build /out/dispatcher /dispatcher ENTRYPOINT ["/dispatcher"] diff --git a/sundynix-gateway/Dockerfile b/sundynix-gateway/Dockerfile index 8625b22..08da545 100644 --- a/sundynix-gateway/Dockerfile +++ b/sundynix-gateway/Dockerfile @@ -1,4 +1,4 @@ -# 第 2 层 业务网关。多阶段构建:node 构建 admin 控制台 → Go 编译(内嵌 admin)→ distroless 运行。 +# 第 2 层 业务网关。多阶段构建:node 构建 admin 控制台 → Go 编译(内嵌 admin)→ alpine 运行。 # 一个 gateway 容器同时 serve 控制台 UI + API + 供桌面端直连,无需单独 admin nginx 容器。 # 构建上下文须为「仓库根」(因 go.mod 用 replace ../sundynix-shared,且需 COPY sundynix-admin/): # docker build -f sundynix-gateway/Dockerfile -t sundynix/gateway . @@ -32,7 +32,11 @@ COPY --from=admin /app/dist ./internal/webui/admin_dist RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/gateway ./cmd/server # ── 2. 运行镜像 ── -FROM gcr.io/distroless/static-debian12:nonroot +# 用 alpine 而非 gcr.io/distroless:内网 runner 连不上 gcr.io。二进制是 CGO_ENABLED=0 全静态, +# alpine 足够;ca-certificates 供 TLS(LLM/MinIO),tzdata 供时区,非 root 用户跑。 +FROM alpine:3.20 +RUN apk add --no-cache ca-certificates tzdata && adduser -D -u 10001 app +USER app COPY --from=build /out/gateway /gateway EXPOSE 8080 ENTRYPOINT ["/gateway"] diff --git a/sundynix-mcp-go/Dockerfile b/sundynix-mcp-go/Dockerfile index e94d3a8..d618ee2 100644 --- a/sundynix-mcp-go/Dockerfile +++ b/sundynix-mcp-go/Dockerfile @@ -13,6 +13,9 @@ COPY sundynix-mcp-go/ ./sundynix-mcp-go/ WORKDIR /src/sundynix-mcp-go RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/mcp-go ./cmd/server -FROM gcr.io/distroless/static-debian12:nonroot +# alpine 运行(内网 runner 连不上 gcr.io;二进制 CGO_ENABLED=0 全静态,ca-certs 供 TLS)。 +FROM alpine:3.20 +RUN apk add --no-cache ca-certificates tzdata && adduser -D -u 10001 app +USER app COPY --from=build /out/mcp-go /mcp-go ENTRYPOINT ["/mcp-go"]