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. Вам нужно сделать несколько изменений:

  1. Обновите ваш Dockerfile, чтобы включить команду, которая должна использоваться для запуска вашего приложения, например

    .
    CMD gunicorn project_name.wsgi
    

    Это не должно повлиять на вашу среду разработки, поскольку ваша docker-compose.yml переопределяет команду. Вам нужно убедиться, что Gunicorn (или любой другой сервер WSGI, который вы решите использовать) объявлен как зависимость.

    .
  2. Обновите ваше приложение Django, чтобы получить строку подключения к PostgreSQL из переменной окружения DATABASE_URL, которую предоставляет Heroku. Обычный способ сделать это - добавить зависимость от dj-database-url и затем соответствующим образом изменить ваши DATABASES настройки:

    DATABASES["default"] = dj_database_url.config()
    

    Советую вам прочитать документацию к этой библиотеке, так как существует более одного способа ее использования.

    Например, вы можете опционально установить соединение по умолчанию для разработки через аргумент default здесь. Или, если вы предпочитаете, вы можете установить свою собственную DATABASE_URL переменную окружения в вашем docker-compose.yml.

  3. Разработайте базу данных PostgreSQL для вашего приложения. Обязательно выполните первый шаг, чтобы проверить, есть ли у вас уже база данных.

    .

Затем передислокация.

Вернуться на верх