使用 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/app
和COPY 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?