为了账号安全,请及时绑定邮箱和手机立即绑定

使用多个 Proto 构建 Docker - 未找到 Proto 文件

使用多个 Proto 构建 Docker - 未找到 Proto 文件

Go
慕田峪7331174 2023-03-15 14:34:17
我遇到了无法构建包含多个原型文件(服务器和文本)的 Dockerfile 的问题。服务器原型在 Dockerfile 目录中,但文本原型在 Dockerfile 父目录中。所以我在父目录中构建 Dockerfile 以将文本原型复制到 Docker 构建中。proto/text.proto: File not found.即使我将 复制proto/text.proto到确切位置,Docker 构建仍会抱怨server/proto/server.proto.这是我的所有文件:Docker文件FROM --platform=linux/x86_64 golang:1.19.3-bullseye# Install grpcRUN go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2 && \    go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28WORKDIR /appCOPY server/. /appCOPY proto/text.proto /app/proto/text.proto# Install protoc and zip system libraryRUN apt-get update && apt-get install -y zip && \    mkdir /opt/protoc && cd /opt/protoc && wget https://github.com/protocolbuffers/protobuf/releases/download/v3.7.0/protoc-3.7.0-linux-x86_64.zip && \    unzip protoc-3.7.0-linux-x86_64.zip# Copy the grpc proto file and generate the go moduleRUN /opt/protoc/bin/protoc --go_out=/app/proto --proto_path=/app/proto --go_opt=paths=source_relative --go-grpc_out=/app/proto --go-grpc_opt=paths=source_relative /app/proto/text.proto /app/proto/server.protoEXPOSE 5051RUN go build -o /serverENTRYPOINT ["/server"]目录树1.text    ├── admin    │   ├── Dockerfile    │   ├── app.js    │   ├── package.json    │   └── web    │       ├── html    │       │   └── index.html    │       └── resources    ├── compose.yaml    ├── db    │   ├── Dockerfile    │   ├── main.go    │   ├── proto    │   │   ├── db.pb.go    │   │   ├── db.proto    │   │   └── db_grpc.pb.go    │   └── text.db    ├── go.mod    ├── go.sum    ├── proto    │   ├── text.pb.go    │   └── text.proto    └── server        ├── Dockerfile        ├── main.go        ├── proto        │   ├── server.pb.go        │   ├── server.proto        │   └── server_grpc.pb.go        └── text            ├── text.go            └── text_test.go我能够在根text目录中运行以下协议:protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative proto/text.proto db/proto/db.proto server/proto/server.proto并在本地运行服务器,但我无法构建我的 Docker:
查看完整描述

1 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

根据评论;在您的 docker 映像中,您具有以下目录结构:

/app/proto/server.proto 
/app/proto/text.proto

server.proto进口text.protoimport "proto/text.proto".

这意味着protoc将查找proto/text.proto在导入路径中调用的文件。您指定为meaning--proto_path=/app/proto的参数,它将检查不存在的内容(因此出现问题)。要解决此问题,请删除(因此使用工作文件夹)或指定.protocprotoc/app/proto/proto/text.proto--proto_path=/app/protoprotoc--proto_path=/app


查看完整回答
反对 回复 2023-03-15
  • 1 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信