【问题标题】:Auto-Deploy Docker-Python application with Heroku使用 Heroku 自动部署 Docker-Python 应用程序
【发布时间】:2021-01-21 00:51:15
【问题描述】:

我有一个 Docker 应用程序,用于构建和运行:

docker build -t swagger_server .
docker run -p 8080:8080 swagger_server

Dockerfile 看起来像这样:

FROM python:3-alpine

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY requirements.txt /usr/src/app/
RUN pip3 install --no-cache-dir -r requirements.txt
COPY . /usr/src/app
EXPOSE 8080
ENTRYPOINT ["python3"]
CMD ["-m", "swagger_server"]

这本身相当简单,但我正在努力将这个 Dockerfile 部署到 Heroku。我已将 Heroku 连接到每次推送时自动部署,但到目前为止还没有配置任何东西。它成功构建并运行应用程序,但我认为它只运行 python 应用程序而不暴露任何端口。

Heroku 有 a documentation-page on their website,但是我不明白如何在 heroku.yml 中指定端口或构建标签。

提供更多上下文:我想部署一个由 swagger-codegen 自动生成的 Python/Flask-Application。我可以在本地访问 API,无论我是在 conda 环境中还是使用 docker 运行它。

有人可以向我解释一下它应该如何工作吗?

【问题讨论】:

    标签: python docker heroku swagger web-deployment


    【解决方案1】:

    当你使用 Heroku 部署 Docker 时,在 Docker 中手动的 EXPOSE 端口将不被尊重,要公开的端口将由 Heroku 自动确定。

    您的应用必须在 $PORT(Heroku 设置的环境)中侦听。

    另外需要注意的是,当你启动 swagger 服务器时,你必须允许来自所有 IP 的流量,否则只能在 localhost 中访问(注意这个 localhost 就是容器本身)。

    import os
    
    app.run(host="0.0.0.0", port=os.getenv('PORT'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 2018-03-29
      • 2021-06-21
      • 2021-05-21
      • 2012-08-17
      • 2017-07-01
      • 2020-07-09
      相关资源
      最近更新 更多