2015-08-26 47 views
-1

我有一個燒瓶腳本,我嘗試通過docker run命令執行它。以下命令我做如何使用docker run啓動flask服務器並在主機上使用它?

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 & 

但是當我做捲曲本地主機:5000連接被拒絕。 如果我進入容器並運行這些東西,並執行curl localhost:5000它在容器中工作.. 這裏有什麼問題?集裝箱

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 
+0

順便說一句,如果您想在Docker中部署您的應用程序而無需學習,請安裝並配置uWSGI,Nginx和Supervisord(以獲得最佳性能和穩健性),您可能需要查看此映像:https://集線器.docker.com/r/tiangolo/uwsgi-nginx-flask/ –

回答

1

如果netstat的-tln的

輸出你的容器腳本綁定到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 
+0

@Iarsks你是對的我可以看到127.0.0.1:5000。我該怎麼做才能克服它? –

+0

根據[這些文檔](https://flask-runner.readthedocs.org/en/latest/),您可能需要在您的'runserver'命令中添加'--host 0.0.0.0'。 – larsks

+0

@Iarsks Nope,在容器中,我能夠做到這一點,但從碼頭運行我仍然無法在5000端口上連接。 –

0

解決了它。通過在manage.py runserver末尾刪除& - 主機0.0.0.0 &將進程保留在後臺,並且如果沒有進程在前臺運行,即使提供了-d選項,容器也會停止。 而@Iarsks,則--host必須是0.0.0.0。

相關問題