繁体   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