From 122f7deb5d88825caf3b1eea5d3ed1d4f521c9e5 Mon Sep 17 00:00:00 2001 From: zhouyonggao <1971162852@qq.com> Date: Sat, 20 Dec 2025 15:20:55 +0800 Subject: [PATCH] =?UTF-8?q?chore(docker):=20=E6=9B=B4=E6=96=B0=20Dockerfil?= =?UTF-8?q?e=20=E4=BB=A5=E4=BC=98=E5=8C=96=E6=9E=84=E5=BB=BA=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E5=92=8C=E4=BE=9D=E8=B5=96=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将基础镜像版本更新至 golang:1.25-alpine,确保与最新的 Go 语言特性兼容。 - 确保 PATH 包含 Go bin 目录,以便 protoc 能找到插件。 - 复制所有模块的 go.mod 文件以利用 Docker 缓存,并在项目根目录执行 go mod download。 - 使用临时工作目录安装 protoc 插件,避免影响项目目录。 - 在生成 proto 文件后更新依赖,确保项目依赖的准确性和完整性。 --- Dockerfile | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 07bd165..71433d0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,9 @@ -FROM golang:1.21-alpine AS builder +FROM golang:1.25-alpine AS builder ENV CGO_ENABLED=0 ENV GO111MODULE=on ENV GOPROXY=https://goproxy.cn,direct +# 确保 PATH 包含 Go bin 目录,以便 protoc 能找到插件 +ENV PATH=$PATH:/go/bin # 安装构建所需的工具:git、protoc、make RUN apk add --no-cache git protobuf make WORKDIR /app @@ -9,19 +11,18 @@ WORKDIR /app # 复制 go.work 文件(用于工作区配置,必须在项目根目录) COPY go.work go.work.sum* ./ -# 复制 server 模块的依赖文件(先复制依赖文件以利用 Docker 缓存) +# 复制所有模块的 go.mod 文件(先复制所有依赖文件以利用 Docker 缓存) +# 需要先复制所有 go.mod,因为 go.work 引用了它们 COPY server/go.mod server/go.sum ./server/ -WORKDIR /app/server -RUN go mod download +COPY grpc/user/userv1/go.mod grpc/user/userv1/go.sum* ./grpc/user/userv1/ -# 复制 grpc/user/userv1 模块的依赖文件 +# 在项目根目录执行 go mod download(go.work 会自动处理所有模块) WORKDIR /app -COPY grpc/user/userv1/go.mod grpc/user/userv1/go.sum ./grpc/user/userv1/ -WORKDIR /app/grpc/user/userv1 -RUN go mod download +RUN go work sync # 安装 protoc 插件(需要在有 go.mod 的环境中安装) -WORKDIR /app +# 使用临时工作目录安装插件,避免影响项目目录 +WORKDIR /tmp RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@latest && \ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest && \ go install github.com/envoyproxy/protoc-gen-validate@latest && \ @@ -29,12 +30,17 @@ RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@latest && \ go install github.com/go-kratos/kratos/cmd/protoc-gen-go-errors@latest # 复制 grpc 目录(包括 proto 文件和 Makefile) +WORKDIR /app COPY grpc/ ./grpc/ # 在容器内生成 proto 文件 WORKDIR /app/grpc RUN make generate +# 生成 proto 后,更新依赖(proto 生成的文件可能需要额外的依赖) +WORKDIR /app/grpc/user/userv1 +RUN go mod tidy + # 复制 server 源代码 WORKDIR /app COPY server/ ./server/