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

我遇到了无法构建包含多个原型文件(服务器和文本)的 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 grpc

RUN go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2 && \

    go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28


WORKDIR /app

COPY server/. /app

COPY proto/text.proto /app/proto/text.proto


# Install protoc and zip system library

RUN 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 module

RUN /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.proto


EXPOSE 5051

RUN go build -o /server

ENTRYPOINT ["/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:



慕田峪7331174
浏览 117回答 1
1回答

浮云间

根据评论;在您的 docker 映像中,您具有以下目录结构:/app/proto/server.proto  /app/proto/text.protoserver.proto进口text.proto与import "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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go