我按照此处的说明进行操作: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: ###
有人有任何想法吗?为什么它似乎在运行两个服务器?
答案 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!一切都按预期工作!