能够将我的Docker容器放到Heroku上,但我不知道如何访问端点

时间:2018-04-04 23:23:56

标签: docker heroku

我按照此处的说明进行操作:https://devcenter.heroku.com/articles/container-registry-and-runtime

然后我按照快速说明分配了一个dyno:https://medium.com/@MatheusCAS/deploying-docker-to-heroku-344985da5426

我现在能够收到应用正在运行的精彩消息:

2018-04-04T23:13:48.082637+00:00 heroku[api.1]: Starting process with command `flask run --host 0.0.0.0 --port 5000`
2018-04-04T23:13:48.785247+00:00 heroku[api.1]: State changed from starting to up
2018-04-04T23:13:50.342651+00:00 app[api.1]:  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
2018-04-04T23:13:50.346134+00:00 app[api.1]:  * Restarting with stat

但是我合法地零线索如何访问我定义的任何端点!我想说api在容器内运行,但是我不能将它及其端点“暴露”到外部世界。我访问的大多数网址或curl只提供应用程序错误 html响应。

这是我的Dockerfile:

FROM python:3.6
ENV TZ UTC
ADD ./requirements.txt /opt/code/requirements.txt
WORKDIR /opt/code
RUN mkdir -p /opt/logs && \
   mkdir -p /opt/media && \
  apt-get update && apt-get install --no-install-recommends -y \
  gcc \
  build-essential &&\
  pip install --no-cache-dir -r requirements.txt && \
  apt-get purge -y \
  gcc \
  build-essential && \
  apt-get clean autoclean && \
  apt-get autoremove -y && \
  rm -rf /var/lib/{apt,dpkg,cache,log}/
EXPOSE 5000
ENV FLASK_APP api_name/wsgi.py
ENV FLASK_CONFIG Dev
ENV FLASK_DEBUG 1
ADD . /opt/code/
RUN python /opt/code/setup.py develop
CMD ["flask", "run", "--host", "0.0.0.0", "--port", "5000"]
ARG SOME_ENV_VAR
ENV SOME_ENV_VAR "$SOME_ENV_VAR"

我的docker-compose.yml:

version: '2'

services:
  api:
    build:
      context: .
      args:
        - SOME_ENV_VAR=${SOME_ENV_VAR}
    container_name: api_name
    image: api_name
    volumes:
      - ../api-name:/opt/code
    ports:
      - "5000:5000"

我意识到Heroku不承认EXPOSE 5000,这可能是个问题吗?我应该尝试删除所有端口的东西,执行容器的构建/推送吗?

非常感谢任何帮助。

编辑:

因此,我已经创建在我的搬运工-compose.yml额外web:服务(字面复制和安培;粘贴的api:与改变图像的名称的部分),进行构建和它推到Heroku的。似乎事情可能更接近实际工作,但我仍然无法达到..好吧,任何端点。目前我的日志正在向我显示:

2018-04-04T23:44:38.275695+00:00 heroku[web.1]: Starting process with command `flask run --host 0.0.0.0 --port 5000`
2018-04-04T23:44:40.252177+00:00 app[web.1]:  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
2018-04-04T23:44:40.258019+00:00 app[web.1]:  * Restarting with stat
2018-04-04T23:44:40.694791+00:00 app[web.1]:  * Debugger is active!
2018-04-04T23:44:40.696554+00:00 app[web.1]:  * Debugger PIN: ###
2018-04-04T23:44:40.737185+00:00 app[web.1]:  * Running on http://0.0.0.0:55008/ (Press CTRL+C to quit)
2018-04-04T23:44:41.095223+00:00 heroku[web.1]: State changed from starting to up
2018-04-04T23:44:41.199265+00:00 app[web.1]:  * Debugger is active!
2018-04-04T23:44:41.199497+00:00 app[web.1]:  * Debugger PIN: ###

有人有任何想法吗?为什么它似乎在运行两个服务器?

2 个答案:

答案 0 :(得分:1)

你好运! docker-compose中的环境变量插值效果很好。这应该暴露您的端点。这与您在每个heroku应用程序中使用的技术相同。

ports:
  - "${PORT}:5000"

端点将在您的应用程序的端口80上提供。

答案 1 :(得分:0)

好的,我明白了。我的问题是,我尴尬地没有意识到我永远无法执行docker-compose build web本地 WITH 远程Heroku环境变量!很明显,当我大声说出来但无论出于什么原因,它昨天在我头上。

无论如何,为了解决这个问题以及启动服务器两次的问题,我更改了CMD中的Dockerfile行:

CMD ["flask", "run", "--host", "0.0.0.0", "--port", "5000"]

为:

CMD python my_api/app.py

确保app.run文件中包含正确的app.py

import os
port = int(os.environ.get("PORT", 5000))
app.run(host='0.0.0.0', port=port)

和bam!一切都按预期工作!