我遇到了无法构建包含多个原型文件(服务器和文本)的 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.proto
与import "proto/text.proto"
.
这意味着protoc
将查找proto/text.proto
在导入路径中调用的文件。您指定为meaning--proto_path=/app/proto
的参数,它将检查不存在的内容(因此出现问题)。要解决此问题,请删除(因此使用工作文件夹)或指定.protoc
protoc
/app/proto/proto/text.proto
--proto_path=/app/proto
protoc
--proto_path=/app
- 1 回答
- 0 关注
- 115 浏览
添加回答
举报
0/150
提交
取消