Docker:在容器里听,不在外面回答

其中有一个“EXPOSE 8000”的docker集装箱。 我开始这样的过程:

sudo docker run -t -i -P imagename 

容器中的进程正在侦听8000。

 # netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:8000 *:* LISTEN Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path # 

在主机(即容器外),我看到端口49164绑定到容器端口8000:

 [S-22]jeff@siegfried:~ $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0b0e333c6ec9 lkz:latest "/bin/bash" About an hour ago Up 6 minutes 0.0.0.0:49164->8000/tcp lkxyz__2015-01-18_202737 [S-22]jeff@siegfried:~ $ 

docker inspect说,除其他事项外,

 "NetworkSettings": { "Bridge": "docker0", "Gateway": "172.17.42.1", "IPAddress": "172.17.0.16", "IPPrefixLen": 16, "PortMapping": null, "Ports": { "8000/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "49164" } ] } }, 

然而,我不能和容器说话。 外,

 [S-22]jeff@siegfried:~ $ telnet localhost 49164 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host. 1,[S-22] jeff@siegfried:~ $ 

而里面,

 # telnet localhost 8000 Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. GET / [18/Jan/2015 23:00:59] "GET /" 200 4066 <!DOCTYPE html> <html> <head> ... 

我期望在外面的telnet到49164返回html,因为它在里面。

有什么build议么?

您可能想要在容器中运行的服务在0.0.0.0而不是127.0.0.1上进行侦听