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

标签 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 它时:
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程序显式绑定(bind)到环回IP地址127.0.0.1这不允许任何远程连接。检查该 python 模拟 Tornado 服务器的文档以获取类似 --bind=0.0.0.0 的内容并进行相应调整。

您可以通过执行 docker exec 并在运行 netstat -ntlp | grep 8888 的容器中确认是否是这种情况。并查看绑定(bind)了哪个 IP。如果是 127.0.0.1 ,这证实确实是问题所在。

关于Docker 容器发布的端口无法访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32404011/

相关文章:

docker - Docker镜像初始文件系统来自哪里?

docker - 如何为 docker 容器分配多个静态 IP

c++ - std、boost 或其他具有隐式键的哈希表容器的广泛实现

c++ - 存储指向对象的指针时改进引用的数据局部性

reactjs - 如何使用React和Spring Boot连接docker-compose

docker - 未在 Google Compute Engine 上使用 Docker 设置 TERM 环境变量

macos - 在 OSX 上通过 docker-py 连接到 Docker-Machine

c++ - 为什么c++11标准库中没有std::clear

c++ - std::array 实例化错误

docker - 无法在 Hyperledger First Network 设置中加入对等 channel