我遇到了无法构建包含多个原型文件(服务器和文本)的 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:
浮云间
相关分类