Python 如何使用docker run启动flask服务器并在主机上使用它?
我有一个flask脚本,我试图通过docker运行命令来执行它。我在执行命令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
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(为了获得最佳性能和健壮性),您可能需要检查此图像: