2015-09-04 81 views
1

因此,這裏的情況,我有這個dockerfile建立了一個容器中運行:碼頭集裝箱發佈的端口不可訪問?

FROM python:2-onbuild 
EXPOSE 8888 
CMD [ "nohup", "mock-server", "--dir=/usr/src/app", "&" ] 

我用這個命令運行它:

docker build -t mock_server . 
docker run -d -p 8888:8888 --name mocky mock_server 

我使用它在Mac上如此boot2docker是怎麼回事我從8888上的boot2docker ip中找到了它。我嘗試了boot2docker ssh並從那裏打開了容器。我跑docker exec -it mocky bashps aux顯示:

USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
root   1 0.0 0.9 113316 18576 ?  Ss 15:16 0:00 /usr/local/bin/python2 /usr/local/bin/mock-server --dir=/usr/src/app & 
root   5 1.6 0.1 21916 3440 ?  Ss 17:52 0:00 bash 
root   9 0.0 0.1 19180 2404 ?  R+ 17:53 0:00 ps aux 

當我捲曲它:

curl -I -XGET localhost:8888/__manage 
HTTP/1.1 200 OK 
Content-Length: 183108 
Set-Cookie: flash_msg_success=; expires=Thu, 04 Sep 2014 17:54:58 GMT; Path=/ 
Set-Cookie: flash_msg_error=; expires=Thu, 04 Sep 2014 17:54:58 GMT; Path=/ 
Server: TornadoServer/4.2.1 
Etag: "efdb5b362491b8e4b8347b97ccafeca02db8d27d" 
Date: Fri, 04 Sep 2015 17:54:58 GMT 
Content-Type: text/html; charset=UTF-8 

所以我的應用程序是在容器內運行,但我無法從外面得到任何東西。這裏可以做些什麼?

+0

另外:在你的Dockerfile CMD行中不需要'nohup'。 –

+0

@PeterLyons如果我不做類似'nohup'的服務器模擬服務器似乎沒有運行。 – Hasen

+0

啊,也許它會退出,如果stdin不是一個tty或其他東西,它可能不應該這樣做。但對於大多數正確的網絡服務器而言,僅供參考,「nohup」不是必需的,不應在docker CMD行中使用。 –

回答

5

首先猜測是python程序明確地綁定了回送IP地址127.0.0.1,它禁止任何遠程連接。查看該python模擬龍捲風服務器的文檔,以獲得類似--bind=0.0.0.0的內容,並進行相應調整。

您可以通過執行docker exec並在容器中運行netstat -ntlp | grep 8888並查看綁定了哪個IP來確認是否屬於這種情況。如果它是127.0.0.1,那確認這確實是問題。

+0

謝謝,我只是想通了,並看到你給出了類似的答案。我沒有意識到你無法在本地主機或環回地址的容器內提供服務。特別是對於這個問題,我將Dockerfile CMD更改爲:'CMD [「nohup」,「mock-server」,「--dir =/usr/src/app」,「--address = 0.0.0.0」,「&」 ]' – Hasen