Cloud Run позволяет вам размещать контейнеры, которые отвечают на HTTP-запрос.
В вашем дизайне, как вам удалось вызвать свой контейнер? ... Да, у вас не определена никакая конечная точка.
Я участвовал в проекте с открытым исходным кодом и обнаружил инструмент, который автоматически bash использует скрипт в качестве конечной точки http. Взгляните на этот Dockerfile . Он использует инструмент shell2http
В вашем случае я рекомендую вам иметь такой Dockerfile:
FROM node
RUN npm i -g firebase-tools
ADD my_script.sh /
COPY --from=msoap/shell2http /app/shell2http /shell2http
RUN chmod +x my_script.sh
ENTRYPOINT ["/shell2http","-export-all-vars"]
CMD ["/update","/my_script.sh"]
Напишите свой my_script.sh
для запуска bash команда, которую вы хотите в соответствии с параметрами запроса.
Пример работы my_script.sh
#!/bin/sh
firebase --version
И после создания вашего контейнера и его развертывания в Cloud Run вызовите https://myservice.....run.app/update?<your env var>
РЕДАКТИРОВАТЬ
Для аутентификации Firebase у вас есть 2 решения, но, прежде чем вдаваться в подробности, вы должны сгенерировать свой токен refre sh, как описано здесь
- Используйте env var для передачи вашего токена. Это не самый безопасный вариант, потому что ваш токен находится в виде обычного текста в окружении Cloud Run.
Разверните свой сервис следующим образом
gcloud run deploy --image=... --set-env-vars=TOKEN=<tokenValue>
И создайте свой my_script.sh
файл, например это
#!/bin/sh
firebase --token $TOKEN <command>
Используйте
секретный менеджер . Это более безопасно, но требует большего. Начните с сохранения токена firebase refre sh в секретном менеджере
echo "<tokenContent>" | gcloud beta secrets create --replication-policy=automatic --data-file=- myFirebaseToken
Я изменил способ создания контейнера, потому что мне нужно использовать gcloud. Таким образом, здесь новый контейнер
FROM google/cloud-sdk
RUN apt-get update && apt-get install -y nodejs npm
RUN echo $(npm i -g firebase-tools)
RUN node -v
ADD my_script.sh /
COPY --from=msoap/shell2http /app/shell2http /shell2http
RUN chmod +x my_script.sh
ENTRYPOINT ["/shell2http","-export-all-vars"]
CMD ["/update","/my_script.sh"]
2 примечания:
- Версия узла по умолчанию - 12. Я не знаю, является ли это проблемой для вас
- Версия узла 12 является проблемой для инструментов firebase, потому что одна зависимость устарела. И команда
npm i
завершается с ненулевым кодом (и сборка не удалась). Хакерство здесь заключается в том, чтобы окружить команду эхо RUN echo $(npm i -g firebase-tools)
. Не совсем чисто, но работает.
А теперь my_script.sh
файл
#!/bin/sh
TOKEN=$(gcloud beta secrets versions access --secret=<mySecretToken> latest)
firebase --token $TOKEN <command>