【发布时间】:2021-04-08 19:47:02
【问题描述】:
我正在尝试在 docker 容器中运行 protoc 命令。
我尝试使用gRPC image,但找不到protoc 命令:
/bin/sh: 1: protoc: 未找到
所以我假设我必须使用RUN 指令手动安装,但有更好的解决方案吗?安装了protoc的官方预编译镜像?
另外,我尝试通过 Dockerfile 安装,但我又得到了protoc: not found。
这是我的 Dockerfile
#I'm not using "FROM grpc/node" because that image can't unzip
FROM node:12
...
# Download proto zip
ENV PROTOC_ZIP=protoc-3.14.0-linux-x86_32.zip
RUN curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v3.14.0/${PROTOC_ZIP}
RUN unzip -o ${PROTOC_ZIP} -d ./proto
RUN chmod 755 -R ./proto/bin
ENV BASE=/usr/local
# Copy into path
RUN cp ./proto/bin/protoc ${BASE}/bin
RUN cp -R ./proto/include/* ${BASE}/include
RUN protoc -I=...
我已经完成RUN echo $PATH 以确保文件夹在路径中并且正常:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
另外RUN ls -la /usr/local/bin 来检查protoc 文件是否在文件夹中并显示:
-rwxr-xr-x 1 root root 4849692 Jan 2 11:16 protoc
所以文件在/bin文件夹中,文件夹在路径中。
我错过了什么吗?
另外,有没有一种简单的方法来获取安装了protoc 的图像?还是最好的选择是生成我自己的图像并从我的存储库中提取?
提前致谢。
编辑:解决了下载linux-x86_64 zip 文件而不是x86_32 的问题。我下载了较低的架构要求,认为x86_64 机器可以运行x86_32 文件,但不能以其他方式运行。我不知道我是否遗漏了有关架构要求的某些内容(可能)还是一个错误。
无论如何,如果它对我找到解决方案的人有所帮助,我已经添加了一个答案,其中包含运行 protoc 和 protoc-gen-grpc-web 所需的 Dockerfile。
【问题讨论】:
标签: docker protocol-buffers grpc proto grpc-node