Docker Image работает с docker-compose up, но не на Amazon ECS или Heroku
Я пытаюсь разместить проект Django с базой данных Postgres в контейнере Docker. Проект представляет собой сайт электронной коммерции с базой данных для информации о продукте. Я смог заставить его работать с помощью docker-compose и получил доступ к сайту, запущенному в контейнере на localhost:8000, но когда я попробовал разместить его на AWS, ничего не получилось. Я загрузил образ в ECR и запустил кластер. Когда я попытался запустить задачу с образом, она показала PENDING, но как только я попытался обновить, задача исчезла. Я попробовал настроить журналы cloudwatch, но они были пустыми, поскольку задача останавливалась сразу после запуска. После этого я попробовал хостинг на Heroku. Мне удалось развернуть образ, но когда я попытался открыть приложение, оно выдало ошибку (см. ниже).
Похоже, что изображение просто терпит неудачу всякий раз, когда я пытаюсь разместить его где-либо, но оно отлично работает, когда я использую docker-compose up. Я думаю, что совершаю очень простую ошибку (я полный новичок во всем этом), но не уверен, в чем она заключается. Спасибо, что нашли время помочь.
Я также добавлю свой Dockerfile и docker-compose.yml
Репозиторий Github для самого проекта: https://github.com/hkgithub1/ComicDemo
Сообщение об ошибке от Heroku
2022-11-25T05:13:31.719689+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=hk-comic-app.herokuapp.com request_id=ea683b1d-e869-4ea9-98aa-2b9ed08f7219 fwd="98.116.68.242" dyno= connect= service= status=503 bytes= protocol=https
2022-11-25T05:22:36.083750+00:00 app[api]: Scaled to app@1:Free by user
2022-11-25T05:22:39.300239+00:00 heroku[app.1]: Starting process with command `python3`
2022-11-25T05:22:39.895200+00:00 heroku[app.1]: State changed from starting to up
2022-11-25T05:22:40.178736+00:00 heroku[app.1]: Process exited with status 0
2022-11-25T05:22:40.228638+00:00 heroku[app.1]: State changed from up to crashed
2022-11-25T05:22:40.232742+00:00 heroku[app.1]: State changed from crashed to starting
2022-11-25T05:22:43.937389+00:00 heroku[app.1]: Starting process with command `python3`
2022-11-25T05:22:44.610097+00:00 heroku[app.1]: State changed from starting to up
2022-11-25T05:22:45.130636+00:00 heroku[app.1]: Process exited with status 0
2022-11-25T05:22:45.180808+00:00 heroku[app.1]: State changed from up to crashed
2022-11-25T05:23:09.462805+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=hk-comic-app.herokuapp.com request_id=f4cc3e04-0257-4336-94b3-7e48094cabd4 fwd="98.116.68.242" dyno= connect= service= status=503 bytes= protocol=https
Dockerfile
FROM python:3.9-slim-buster
ENV PYTHONUNBUFFERED=1
WORKDIR /django
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
docker-compose.yml
version: "3"
services:
app:
build: .
volumes:
- .:/django
- ./wait-for-it.sh:/wait-for-it.sh
ports:
- 8000:8000
image: app:django
container_name: django_container
command: /wait-for-it.sh db:5432 -- python3 manage.py runserver 0.0.0.0:8000
depends_on:
- db
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=comic_db
- POSTGRES_USER=comic_user
- POSTGRES_PASSWORD=password
container_name: postgres_db
Heroku не использует docker-compose.yml
. Вам нужно сделать несколько изменений:
Обновите ваш
.Dockerfile
, чтобы включить команду, которая должна использоваться для запуска вашего приложения, напримерCMD gunicorn project_name.wsgi
Это не должно повлиять на вашу среду разработки, поскольку ваша
.docker-compose.yml
переопределяет команду. Вам нужно убедиться, что Gunicorn (или любой другой сервер WSGI, который вы решите использовать) объявлен как зависимость.Обновите ваше приложение Django, чтобы получить строку подключения к PostgreSQL из переменной окружения
DATABASE_URL
, которую предоставляет Heroku. Обычный способ сделать это - добавить зависимость отdj-database-url
и затем соответствующим образом изменить вашиDATABASES
настройки:DATABASES["default"] = dj_database_url.config()
Советую вам прочитать документацию к этой библиотеке, так как существует более одного способа ее использования.
Например, вы можете опционально установить соединение по умолчанию для разработки через аргумент
default
здесь. Или, если вы предпочитаете, вы можете установить свою собственнуюDATABASE_URL
переменную окружения в вашемdocker-compose.yml
.Разработайте базу данных PostgreSQL для вашего приложения. Обязательно выполните первый шаг, чтобы проверить, есть ли у вас уже база данных.
.
Затем передислокация.