Я новичок в Docker и Google Cloud. Я пытаюсь разместить себя в Google Cloud: https://github.com/movie-web/backend. Однако я продолжаю получать эту ошибку:
Revision 'backend-movieweb-00006-rjg' is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=80 environment variable. Logs for this revision might contain more information. Logs URL: Open Cloud Logging For more troubleshooting guidance, see https://cloud.google.com/run/docs/troubleshooting#container-failed-to-start
Я установил здесь версию Docker Hub, которую я использую:
- Я также разрешил правила входа и выхода для портов через брандмауэр Google.
- Я также попробовал добавить дополнительный аргумент контейнера (-p 80:80).
- Я тоже пробовал разные порты
Если я запускаю его непосредственно из облачной оболочки PowerShell без каких-либо других команд, он работает, однако общедоступный IP-адрес, который он предоставляет, требует, чтобы моя учетная запись Google аутентифицировала его, поэтому я не могу использовать этот метод:
-p 80:80 \
-e MWB_POSTGRES__CONNECTION=[removed_postgrs_url] \
-e MWB_CRYPTO__SESSION_SECRET = "[removed_crypto_session_secret] \
-e MWB_META__NAME=test-movie-web \
-e MWB_POSTGRES__SSL=true \
-e MWB_POSTGRES__MIGRATE_ON_BOOT=true \
-e MIKRO_ORM_MIGRATIONS_DISABLE_FOREIGN_KEYS=false \
-e MWB_SERVER__ALLOW_ANY_SITE=true \
registry-1.docker.io/techygiraffe999/backend-movieweb:1.3.1
Дополнительные настройки:
Allow unauthenticated invocations Tick this if you are creating a public API or website.AllОжидал, что он будет работать нормально, предоставляя общедоступный IP-адрес с открытым портом 80.


Несколько соображений:
Учитывая, что вы играли с сопоставлением портов, я подозреваю, что проблема может быть в самом «запуске». «Не удалось запустить и прослушать» может быть проблемой запуска или проблемой порта. Я обнаружил, что мой контейнер иногда запускается локально, но не в облаке из-за различных проблем с конфигурацией.
Cloud Run по умолчанию использует порт 8080. Cloud run вставляет это в контейнер как переменную среды PORT при запуске, поэтому убедитесь, что ваше приложение внутри контейнера настроено соответствующим образом.
Этот ответ не имеет ничего общего с Cloud Run. Например, Cloud Run не использует Docker. Такие операторы, как EXPOSE и ENV, не действуют в Cloud Run.
Спасибо @JohnHanley. Очень справедливо: этот ответ был слишком ориентирован на Docker. Я отредактировал его соответствующим образом, и, пожалуйста, не стесняйтесь обращаться ко мне, если он нуждается в дальнейшем улучшении.
Ваш ответ полезен. Однако для ответа ОП должен предоставить Dockerfile и команду развертывания. Получив эту информацию, обновите свой ответ.
Нам нужно увидеть Dockerfile и команду развертывания.