Python 如何使用docker run启动flask服务器并在主机上使用它?

Python 如何使用docker run启动flask服务器并在主机上使用它?,python,flask,docker,Python,Flask,Docker,我有一个flask脚本,我试图通过docker运行命令来执行它。我在执行命令 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/mana

我有一个flask脚本,我试图通过docker运行命令来执行它。我在执行命令

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 &
但当我这样做时,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  

如果您的脚本在容器内绑定到
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

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

@Iarsks你说得对,我可以看到127.0.0.1:5000。我应该怎么做才能克服它呢?据我所知,您可能需要将
--host 0.0.0
添加到您的
runserver
命令中。@Iarsks不,在容器中我可以做到,但从docker run我仍然无法在5000端口上连接。您能否更新您的问题以显示(a)您使用
--host
参数修改的
db_loader.sh
,以及(b)启动后容器内的
netstat-tln
输出?@Isrsks请参阅编辑后的问题。顺便说一句,如果您想在Docker中部署应用程序,而不必学习、安装和配置uWSGI、Nginx和SupervisorORD(为了获得最佳性能和健壮性),您可能需要检查此图像: