簡體   English   中英

Docker 圖片適用於 docker-compose up 但不適用於 Amazon ECS 或 Heroku

[英]Docker Image works with docker-compose up but not on Amazon ECS or Heroku

我正在嘗試在 Docker 容器中托管一個帶有 Postgres 數據庫的 Django 項目。 該項目是一個帶有產品信息數據庫的實踐電子商務網站。 我能夠使用 docker-compose 啟動它並訪問在 localhost:8000 的容器中運行的站點,但是當我嘗試在 AWS 上托管它時它不起作用。 我將圖像上傳到 ECR 並啟動了一個集群。 當我嘗試使用圖像運行任務時,它顯示 PENDING 但當我嘗試刷新時,任務就消失了。 我嘗試設置 cloudwatch 日志,但它們是空的,因為任務在啟動后立即停止。 之后我嘗試在 Heroku 上托管。我能夠部署圖像,但是當我嘗試打開應用程序時它顯示錯誤(如下所示)。

感覺每當我嘗試在任何地方托管圖像時圖像都會立即失敗,但當我使用 docker-compose 時它工作正常。 我認為我犯了一個非常基本的錯誤(我在這方面完全是初學者)但不確定它是什么。 感謝您抽出時間提供幫助。

我還將添加我的 Dockerfile 和 docker-compose.yml

來自 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 應用程序以從 Heroku 提供的DATABASE_URL環境變量中獲取其 PostgreSQL 連接字符串。 一種常見的方法是添加對dj-database-url的依賴,然后相應地更改DATABASES設置:

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

    我建議您閱讀該庫的文檔,因為使用它的方法不止一種。

    例如,您可以選擇通過此處的default參數設置用於開發的默認連接。 或者,如果您願意,可以在docker-compose.yml中設置自己的DATABASE_URL環境變量。

  3. 為您的應用程序提供 PostgreSQL 數據庫 確保執行第一步以檢查您是否已經擁有數據庫。

然后重新部署。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM