Docker 码头工人在集装箱里听着,但在外面没有回答,为什么?

Docker 码头工人在集装箱里听着,但在外面没有回答,为什么?,docker,Docker,我有一个docker容器,其中包含“EXPOSE 8000”指令。我是这样开始这个过程的: 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

我有一个docker容器,其中包含“EXPOSE 8000”指令。我是这样开始这个过程的:

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
说(除其他外)

然而,我不能和集装箱说话。外面,

[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 localhost 8000
正在尝试::1。。。
正在尝试127.0.0.1。。。
已连接到本地主机。
转义字符为“^]”。
得到/
[18/Jan/2015 23:00:59]“GET/”200 4066
...
我希望telnet在外部返回49164,就像在内部一样返回html


有什么建议吗?

您可能想让容器中运行的服务收听
0.0.0
,而不是
127.0.0.1

尝试从主机连接172.17.0.16:8000。 我对nginx也有类似的问题。
我将容器中的127.0.0.1:8000替换为172.17.0.16:8000,这对我很有效。

Aha,这可能是容器实际上只监听localhost。在主机siegfried上执行相同的操作,我可以连接
telnet localhost 8000
,但不能连接
telnet siegfried 8000
。好的,那么现在我该如何修复这个…这是一个救命恩人。使用docker for Apache Spark,spark://0.0.0.0:7077how 我们是否在windows 10中使用docker执行此操作?侦听0.0.0.0?在我们的示例中,端口正在侦听0.0.0.0,但我们需要将Docker重置为出厂默认值(Docker首选项/炸弹选项卡)并重新安装图像。只是为了确认,是的,这是Docker接受传入连接但Docker内部运行的服务拒绝它们时您将看到的行为。我还必须将Docker服务更改为侦听0.0.0.0以修复该问题,但Docker配置本身在其他方面没有更改。详细说明了为什么会这样
# 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>
...