使用 docker 在 heroku 中部署 Django api rest

Posted

技术标签:

【中文标题】使用 docker 在 heroku 中部署 Django api rest【英文标题】:Deploy Django api rest in heroku using docker 【发布时间】:2020-09-05 00:24:34 【问题描述】:

我正在尝试访问我在 Heroku 中使用 docker 发布的 Api rest,并看到 Dynos 正在运行我放入 Dockerfile 中的 gunicorn 命令。 我使用的 Dockerfile 是:

FROM ubuntu:18.04

RUN apt update
RUN apt install -y python3 python3-pip
RUN mkdir /opt/app

ENV PYTHONUNBUFFERED 1
ENV LANG C.UTF-8
ENV DEBIAN_FRONTEND=noninteractive 

COPY Ski4All/ /opt/app/
COPY requirements.txt /opt/app/
RUN pip3 install -r /opt/app/requirements.txt
ENV PORT=8000

CMD exec gunicorn Ski4All.wsgi:application — bind 0.0.0.0:$PORT

当我释放时,我通过 heroku run bash -a "name app" 进入容器并执行 ps aux 我没有看到 api 正在运行。但是如果我在容器中时执行我的 Dockerfile 的命令。

有什么想法吗?

【问题讨论】:

你在 docker 容器中运行的时候到底运行了什么? RUN mkdir /opt/app 更改为WORKDIR /opt/appCOPY Ski4All/ /opt/app/ 更改为COPY Ski4All . @Programmingjoe 你是什么意思?当我将容器释放到 heroku 中时,一旦我使用 heroku container:release -a "app name" 或者我必须在发布后运行某些东西,CMD gunicorn 命令应该运行? @HariHaraSudhan 感谢它的工作,我猜错误是 gunicorn 在根路径而不是 workdir 中运行。 【参考方案1】:

@jhaos 提到 gunicorn 在根路径下运行

Dockerfile中更改以下内容

RUN mkdir /opt/app to WORKDIR /opt/app
COPY Ski4All/ /opt/app/ to COPY Ski4All .

【讨论】:

【参考方案2】:

问题是 gunicorn 命令在 / 根路径中运行,而不是在正确的工作目录中。在 cmets @HariHaraSuhan 解决了错误。

【讨论】:

您可以在下面将他的答案标记为正确 :) 我相信其他人也会喜欢它

以上是关于使用 docker 在 heroku 中部署 Django api rest的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 使用 docker 一键部署 golang 应用

使用docker将django应用程序部署到heroku时在哪里运行collectstatic?

如何使用docker上传和部署django cookiecutter项目到heroku?

将 docker 镜像部署到 heroku

Heroku/Django:没有名为 dj_database_url 的模块

如何在 Heroku 中运行 Docker 容器