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

标签 docker heroku

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

然后我按照快速说明分配了一个测功机: 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 正在容器内运行,但我无法将它及其端点“暴露”给外界。我访问的大多数 URL 或 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,这会是一个问题吗?我应该尝试删除所有端口内容,执行容器的构建/推送吗?

任何帮助将不胜感激。

编辑:

因此,我在 docker-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: ###

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

最佳答案

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

ports:
  - "${PORT}:5000"

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

关于docker - 能够将我的 Docker 容器放到 Heroku 上,但我不知道如何访问端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49661885/

相关文章:

python-2.7 - 使用 Python 2 和 3 安装附加包 Jupyter

java - Docker退出而不会引发错误或执行代码

ruby-on-rails - 如何从 Resque worker 向客户端发送数据?

java - 使用ec2上的java SDK在aws中承担不同的角色,它使用分配的IAM进行访问

docker - 无法从 Laravel 应用程序连接到 Redis

docker - 带有OpenSSL和stdin,stdout的Docker Exec

django.core.exceptions.ImproperlyConfigured : WSGI application '{project_name}.wsgi.application' could not be loaded; Error importing module

ruby-on-rails - 下拉菜单在 Heroku 上不起作用

javascript - 重复的键值违反唯一约束 - 使用 KnexJS 和 Postgresql

node.js - heroku上的咕噜声和 bower