docker 执行http服务端口映射不生效

# 使用nodejs的docker镜像, 1.在里面创建了一个http服务,然后监听30000端口 ```js var http = require('http'); var server = http.createServer(function(req, res) { res.end('hello i am '); }); server.listen(30000); ``` 2.执行 docker run -ti --name test3 -p 30000:30000 server sh 3.进到控制台以后运行了http服务; 4.在外面执行docker ps -a效果是 ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aa4be23e6353 server "sh" About an hour ago Up About an hour 0.0.0.0:30000->30000/tcp test3 ``` 5.但是访问本地的30000端口还是拒绝连接 ``` ➜ ~ telnet localhost 30000 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection refused telnet: Unable to connect to remote host ``` 不知道啥原因…==#,有人能帮忙解答一下么? <div class="aw-upload-img-list active"> <a href="http://dockone.io/uploads/questions/20151013/b58ec41a81a764b884357531c04b4c87.png" target="_blank" data-fancybox-group="thumb" rel="lightbox"><img src="http://dockone.io/uploads/questions/20151013/b58ec41a81a764b884357531c04b4c87.png" class="img-polaroid" title="a.png" alt="a.png" /></a> </div>
a.png
已邀请:

徐磊 - BlackOps@Qunar

赞同来自: albin

先确认下docker-proxy绑定的地址是否是IPV6的。我个人的机器上默认情况下是绑定IPV6的,快速解决的办法就是给`-p`参数制定bind的IP,例如`-p 127.0.0.1:30000:30000`。然后访问本地的30000端口就可以了。 关于`-p`默认bind地址是IPV6还是IPV4的问题,可以参考这个问题,讨论很详细,内容比较全面了。 https://github.com/docker/docker/issues/2174

tuxknight

赞同来自: albin

server.listen(30000); 默认监听127.0.0.1这个IP,但这个IP地址是host的IP而不是container的IP,所以应该指定监听的IP地址,或者hostname。 解决方法就是先获取到hostname,然后server.listen的时候指定hostname。

[已注销]

赞同来自: albin

我自己试了一下是OK的,直接用的你的代码。你能不能贴下`netstat -tlnp`的结果?

要回复问题请先登录注册