Ошибка Cloud Run: Container failed to start. Не удалось запустить, а затем прослушать порт, определенный переменной окружения PORT. - Django
Я новичок в задавании вопросов на SO, так что потерпите меня. Я знаю, что уже есть много ответов об этом, но ни один из них не работает. Я работал над созданием веб-приложения на Django, и теперь мне нужно развернуть его, чтобы вы могли получить доступ к нему на мобильных устройствах. Я пытался запустить его на Google Cloud Run, но безуспешно. Я создал контейнер Docker, и он отлично работает локально, но когда я пытаюсь развернуть контейнер, он выдает следующую ошибку:
Cloud Run error: Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable. Logs for this revision might contain more information.
Журналы возвращаются на ту же страницу, без дополнительной информации. Я пробовал менять порты в docker-compose.yml и Dockerfile на 80, 8000, 8080 и любые другие варианты между ними, но безуспешно. Я знаю, что для работы с Django нужно использовать App Engine, но я уже загрузил слишком много материала в базу данных sqlite3, а все источники, которые я могу найти для App Engine, посвящены PostGres, на который у меня нет времени переходить. Любая помощь в этом вопросе буквально спасет все остатки здравомыслия, которые у меня остались после этого проекта, хаха. Я также убедился, что включил ALLOWED_HOST 0.0.0.0 в settings.py, так что я действительно не знаю, что происходит. Вот содержимое моего Dockerfile:
ENV PYTHONUNBUFFERED 1
EXPOSE 8080
ENV PORT 8080
ENV HOST 0.0.0.0
RUN mkdir /Exeplore
WORKDIR /Exeplore
COPY requirements.txt /Exeplore/
RUN pip install -r requirements.txt
COPY . /Exeplore/
Вот содержимое моего файла docker-compose.yml:
web:
build: .
environment:
MYENV: EXAMPLE
volumes:
- .:/code
web_migrate:
extends:
service: web
command: python manage.py migrate
web_run:
extends:
service: web
command: python manage.py runserver 0.0.0.0:8080
ports:
- "8080:8080"
[Это ошибка, которую я получаю от google cloud run, а журнал просто ссылается на ту же страницу][1]
Надеюсь, я все сделал правильно, но, пожалуйста, дайте мне знать, если потребуется что-то еще. [1]: https://i.stack.imgur.com/Ib693.png
Добавьте команды Docker compose в Dockerfile
ENV PYTHONUNBUFFERED 1
EXPOSE 8080
ENV PORT 8080
ENV HOST 0.0.0.0
RUN mkdir /Exeplore
WORKDIR /Exeplore
COPY requirements.txt /Exeplore/
RUN pip install -r requirements.txt
COPY . /Explore/
ENTRYPOINT [ "python" "manage.py"]
CMD [ "runserver", "0.0.0.0:8080" ]
Теперь вы должны иметь возможность вызвать приложение python с необходимыми параметрами, например, для выполнения команды по умолчанию.
docker run -p 8080:8080 my_container
В приведенном выше Dockerfile:
- Точка входа выдаст вызов интерпретатору
pythonи вызовет приложениеmanage.py. - CMD (команда) вызовет дополнительные параметры, используемые в композитном файле (т.е.
runserver 0.0.0.0:8080). Вы можете переопределить поведение по умолчанию, добавив необходимый параметр, напримерmigrate.
e.g.
docker run -p 8080:8080 my_container migrate