2015-01-18 14 views
9

Ich habe einen Docker Container mit "EXPOSE 8000" unter seinen Anweisungen gebaut. Ich begann den Prozess wie folgt aus:Docker: im Container hören, nicht draußen antworten

sudo docker run -t -i -P imagename 

Der Prozess in dem Behälter auf 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 
# 

Auf dem Host hört (dh außerhalb des Behälters), sehe ich, dass Port 49164 zu gebunden ist Containerhafen 8000:

[S-22][email protected]:~ $ 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][email protected]:~ $ 

Inded, sagt docker inspect (unter anderem)

"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" 
      } 
     ] 
    } 
}, 

Und trotzdem kann ich nicht mit dem Container sprechen. Draußen

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

während im Inneren,

# 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> 
... 

Ich würde die telnet zu 49.164 auf der Außenseite erwarten html zurückzukehren, wie es auf der Innenseite der Fall ist.

Irgendwelche Vorschläge?

+0

Aha hören laufen lassen, dies könnte sein, dass der Behälter auf localhost wirklich nur zuhört. Wenn ich dasselbe auf Host siegfried mache, kann ich mich mit 'telnet localhost 8000' verbinden, aber nicht mit' telnet siegfried8000'. OK, also, wie repariere ich das jetzt ... – jma

Antwort

18

Sie wollen wahrscheinlich den Dienst haben Sie in den Behälter auf 0.0.0.0 statt 127.0.0.1

+0

das war ein Lebensretter. Mit Docker für Apache Spark, Funken:/0.0.0.0: 7077 – javaNoober

+0

Wie machen wir das in Windows 10 mit Andockfenster? höre auf 0.0.0.0? – blackhawk

+0

In unserem Fall war der Port auf 0.0.0.0 gelauscht, aber wir mussten Docker auf die Werkseinstellungen zurücksetzen (Docker Preferences/Bomb) und Bilder neu installieren. – dfdumaresq