【问题标题】:How to start flask server with docker run and use it on host? [duplicate]如何使用 docker run 启动烧瓶服务器并在主机上使用它? [复制]
【发布时间】:2015-08-26 13:27:19
【问题描述】:

我有一个烧瓶脚本,我尝试通过 docker run 命令执行它。我正在执行以下命令

docker run -dit -v /media/sf_MY_WINDOWS/GitRepo/:/ext/GitRepo -p 5000:5000 "isbhatt/prefixman:v1" /ext/docker/vm_scripts/db_loader.sh

而 db_loader.sh 文件包含

/usr/local/bin/python2.7 /ext/SDSNG/src/prefix_manager/manage.py runserver --host 0.0.0.0 &

但是当我 curl localhost:5000 连接被拒绝时。 如果我进入容器并运行这些东西并执行 curl localhost:5000 它在容器中工作.. 这里有什么问题?

netstat -tln 在容器上的输出

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 0.0.0.0:5000                0.0.0.0:*                   LISTEN  

【问题讨论】:

  • 顺便说一句,如果您想在 Docker 中部署您的应用程序而无需学习、安装和配置 uWSGI、Nginx 和 Supervisord(以获得最佳性能和健壮性),您可能需要查看此图像: hub.docker.com/r/tiangolo/uwsgi-nginx-flask

标签: python flask docker


【解决方案1】:

如果在您的容器内您的脚本绑定到127.0.0.1,那么通常使用-p 提供的端口转发将不起作用。确保在容器内您的服务正在侦听0.0.0.0

您可以通过在容器内运行 netstat -tln 来检查您的服务正在侦听的地址:

container# netstat -tln

如果你看到这个:

tcp        0      0 127.0.0.1:5000         0.0.0.0:*               LISTEN

那是你的问题。你想看:

tcp        0      0 0.0.0.0:5000           0.0.0.0:*               LISTEN

【讨论】:

  • @Iarsks 你说得对,我可以看到 127.0.0.1:5000。我应该怎么做才能克服它?
  • 根据these docs,您可能需要将--host 0.0.0.0 添加到您的runserver 命令中。
  • @Iarsks 不,在容器中我可以做到,但是从 docker run 我仍然无法连接到 5000 端口。
  • 您能否更新您的问题以显示 (a) 使用 --host 参数修改的 db_loader.sh,以及 (b) 容器内启动后 netstat -tln 的输出?
  • @Isrsks 查看已编辑的问题。
【解决方案2】:

解决了。通过在 manage.py runserver --host 0.0.0.0 末尾删除 & 那 & 将进程保持在后台,如果没有进程在前台运行,即使您提供了 -d 选项,容器也会停止。 还有@Iarsks,是的 --host 必须是 0.0.0.0 。

【讨论】:

    猜你喜欢
    • 2019-04-07
    • 1970-01-01
    • 2018-07-23
    • 2016-11-29
    • 2021-01-07
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多