Я пытаюсь запустить команду protoc
в док-контейнер.
Я пытался использовать gRPC-образ, но команда protoc
не найдена:
/bin/sh: 1: протокол: не найден
Итак, я предполагаю, что мне нужно установить вручную, используя инструкции RUN
, но есть ли лучшее решение? Официальный предварительно скомпилированный образ с установленным protoc
?
Кроме того, я пытался установить через Dockerfile, но снова получаю protoc: not found
.
Это мой докерфайл
#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
? или лучший вариант — сгенерировать собственный образ и извлечь его из моего репозитория?
Заранее спасибо.
Изменить: решена загрузка ZIP-файла linux-x86_64
вместо x86_32
. Я загрузил более низкие требования к архитектуре, думая, что машина x86_64
может запускать файл x86_32
, но не наоборот. Я не знаю, упускаю ли я что-то из требований к архитектуре (вероятно) или это ошибка.
В любом случае, если это кому-то поможет, я нашел решение и добавил ответ с необходимым Dockerfile для запуска protoc
и protoc-gen-grpc-web
.