Docker容器发布的端口不可访问?

所以这里就是这种情况,我有一个使用这个dockerfile构build的容器:

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的时候:

 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 

所以我的应用程序在容器内部运行,但是我无法从外部获取任何东西。 这里可以做些什么?

首先猜测的是python程序显式绑定到禁止任何远程连接的环回IP地址127.0.0.1 。 检查该python模拟龙卷风服务器的文档,类似于--bind=0.0.0.0并相应地进行调整。

你可以通过执行一个netstat -ntlp | grep 8888 exec来确认是否是这种情况,并且在运行netstat -ntlp | grep 8888的容器中 netstat -ntlp | grep 8888并查看哪个IP被绑定。 如果是127.0.0.1 ,那证实确实是这个问题。