Docker容器发布的端口无法访问?

时间:2015-09-04 17:58:03

标签: docker containers

所以情况就是这样,我有一个用这个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

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

2 个答案:

答案 0 :(得分:6)

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

您可以通过执行docker exec以及运行netstat -ntlp | grep 8888的容器并查看绑定的IP来确认是否是这种情况。如果是127.0.0.1,则确认确实存在问题。

答案 1 :(得分:0)

Docker在操作系统之上运行,而docker计算机具有其自己的IP地址。无法访问该端口的一个可能原因是您使用的是localhost,试图达到127.0.0.1:但是您的docker计算机可能正在运行另一个IP地址,因此通过替换IP地址可以使curl起作用。

$ docker-machine ip default

这应该给您docker机器的ip地址,将其替换为localhost。