修复 API 镜像构建:启用 CGO 以支持 webp 编码

chai2010/webp 依赖 C 代码,CGO_ENABLED=0 会导致 webpEncode 等符号未定义;安装 gcc/musl-dev 并静态链接。
This commit is contained in:
yml2213
2026-07-15 16:12:24 +08:00
parent 3dbd81cf49
commit ec84ddb35e
+13 -7
View File
@@ -2,7 +2,8 @@
# build context: 仓库根目录
# docker build -f deploy/docker/Dockerfile.api -t kefu-api:latest .
#
# 国内加速(默认开启):Alpine 清华源 + goproxy.cn
# 国内加速(默认开启):Alpine 腾讯云源 + goproxy.cn
# 注意:chai2010/webp 需要 CGO,必须装 gcc/musl-dev 且 CGO_ENABLED=1
# 海外构建可覆盖:
# docker build --build-arg ALPINE_MIRROR=dl-cdn.alpinelinux.org \
# --build-arg GOPROXY=https://proxy.golang.org,direct ...
@@ -12,9 +13,10 @@ FROM golang:1.24-alpine AS builder
ARG ALPINE_MIRROR=mirrors.cloud.tencent.com
ARG GOPROXY=https://goproxy.cn,direct
# go.mod 要求更高版本,自动下载 toolchain
# go.mod 要求更高版本,自动下载 toolchain
ENV GOTOOLCHAIN=auto
ENV CGO_ENABLED=0
# webpchai2010)含 C 代码,关闭 CGO 会 undefined: webpEncode*
ENV CGO_ENABLED=1
ENV GOPROXY=${GOPROXY}
ENV GOSUMDB=sum.golang.google.cn
@@ -22,7 +24,7 @@ RUN set -eux; \
if [ -n "${ALPINE_MIRROR}" ]; then \
sed -i "s#dl-cdn.alpinelinux.org#${ALPINE_MIRROR}#g" /etc/apk/repositories; \
fi; \
apk add --no-cache git ca-certificates tzdata
apk add --no-cache git ca-certificates tzdata gcc musl-dev
WORKDIR /src
@@ -31,12 +33,16 @@ COPY server/go.mod server/go.sum ./
RUN go mod download
COPY server/ ./
# 静态链接,最终 alpine 镜像无需再装 libwebp / gcc
RUN GOOS=linux GOARCH=amd64 \
go build -trimpath -ldflags="-s -w" -o /out/server ./cmd/main.go
go build -trimpath \
-ldflags="-s -w -linkmode external -extldflags '-static'" \
-o /out/server ./cmd/main.go
# 种子程序(compose profile seed 使用)
RUN GOOS=linux GOARCH=amd64 \
go build -trimpath -ldflags="-s -w" -o /out/seed ./cmd/seed
go build -trimpath \
-ldflags="-s -w -linkmode external -extldflags '-static'" \
-o /out/seed ./cmd/seed
FROM alpine:3.21