diff --git a/Dockerfile b/Dockerfile index 4762838..0479869 100644 --- a/Dockerfile +++ b/Dockerfile @@ -62,17 +62,39 @@ WORKDIR /app/server RUN go build -ldflags="-w -s" -trimpath -o /out/server ./cmd/server/main.go && \ chmod +x /out/server -# 使用最小化的 alpine 镜像(包含时区支持,应用需要 loc=Local) -FROM alpine:3.19 +# 使用带Go环境的镜像,支持容器启动时编译 +FROM golang:1.25-alpine +ENV CGO_ENABLED=0 +ENV GO111MODULE=on +ENV GOPROXY=https://goproxy.cn,https://goproxy.io,https://mirrors.aliyun.com/goproxy/,direct # 配置 Alpine 国内镜像源(阿里云) RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories -# 安装运行时必需的包:时区和 CA 证书 -RUN apk add --no-cache ca-certificates tzdata && \ +# 安装运行时必需的包:时区、CA 证书和 git +RUN apk add --no-cache ca-certificates tzdata git && \ mkdir -p /app/storage/export /app/log WORKDIR /app -COPY --from=builder /out/server /app/server + +# 复制 go.work 和依赖文件 +COPY go.work go.work.sum* ./ +COPY server/go.mod server/go.sum ./server/ +COPY grpc/user/userv1/go.mod grpc/user/userv1/go.sum* ./grpc/user/userv1/ + +# 下载依赖(利用缓存) +RUN go work sync + +# 复制 grpc 生成的代码 +COPY --from=builder /app/grpc/ ./grpc/ + +# 复制 server 源代码 +COPY server/ ./server/ + # 复制前端静态文件 COPY web/ ./web/ + +# 复制启动脚本 +COPY scripts/docker-entrypoint.sh /app/docker-entrypoint.sh +RUN chmod +x /app/docker-entrypoint.sh + EXPOSE 8077 -# 使用 root 用户运行 -ENTRYPOINT ["/app/server"] +# 容器启动时编译并运行 +ENTRYPOINT ["/app/docker-entrypoint.sh"]