ich mit so etwas wieDocker und netstat: netstat nicht Häfen von Docker Behältern ausgesetzt zeigt,
Docker Ports meinem contaners an die Host-Maschine aussetzendocker run -p 80:80 ...
dann versuche ich für Debugging-Zwecke mit allen Listening-Ports angezeigt werden netstat
zB:
netstat -at
Merkwürdige ist, dass netstat nicht mit freiliegenden Ports meine docker-Container angezeigt werden, obwohl sie an den Browser hören und antworten.
Wie mache ich netstat
diese exponierten Ports anzeigen?
UPDATE: Ich laufe dies auf Debian 8 Jessie. Hier ist, was ich tue:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9dfa08bab50d workflows-nginx "/bin/sh -c '/usr/sbi" 2 hours ago Up 2 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp workflows-nginx
d0b0c3f90f13 workflows-django "/bin/sh -c 'python /" 7 hours ago Up 3 hours 0.0.0.0:8000->8000/tcp workflows-django
99a857c92533 workflows-db "/docker-entrypoint.s" 7 hours ago Up 3 hours 5432/tcp workflows-db
Hier Docker meldet, dass Container-Ports an den Host weitergeleitet werden. Wenn ich den Container workflows-nginx
stoppe, hört er außerdem auf, über HTTP (Port 80) auf den Browser zu antworten. Wenn ich es erneut starte, fängt es wieder an zu antworten. Hier
ist die Ausgabe von sudo netstat -at | less
:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 localhost:ipp *:* LISTEN
tcp 0 0 *:15672 *:* LISTEN
tcp 0 0 *:postgresql *:* LISTEN
tcp 0 0 localhost:smtp *:* LISTEN
tcp 0 0 *:25672 *:* LISTEN
tcp 0 0 *:48142 *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:epmd *:* LISTEN
tcp 0 0 bob-acer:34866 104.16.33.249:http ESTABLISHED
tcp 0 0 bob-acer:42380 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:42543 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:42525 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:44076 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:42944 stackoverflow.com:https ESTABLISHED
tcp 0 0 localhost:epmd localhost:50831 ESTABLISHED
tcp 0 0 bob-acer:42655 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:42384 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:44626 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:42390 stackoverflow.com:https ESTABLISHED
tcp 0 0 localhost:50831 localhost:epmd ESTABLISHED
tcp 0 0 bob-acer:48301 c2.52.c0ad.ip4.st:https ESTABLISHED
tcp 0 0 bob-acer:42151 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:42205 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:42539 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:44737 stackoverflow.com:https ESTABLISHED
tcp 0 0 bob-acer:39648 77.94.164.251:https ESTABLISHED
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 localhost:ipp [::]:* LISTEN
tcp6 0 0 [::]:postgresql [::]:* LISTEN
tcp6 0 0 localhost:smtp [::]:* LISTEN
tcp6 0 0 [::]:44794 [::]:* LISTEN
tcp6 0 0 [::]:8000 [::]:* LISTEN
tcp6 0 0 [::]:amqp [::]:* LISTEN
tcp6 0 0 [::]:sunrpc [::]:* LISTEN
tcp6 1 0 localhost:58497 localhost:ipp CLOSE_WAIT
Wie Sie sehen können, weder Port 80, noch Port 443 berichtet. Port 8000 von workflows-django
aus irgendeinem Grund ist auf IPv6-Schnittstelle geöffnet. Außerdem habe ich vergessen, postgres auf dem Host-Rechner zu deaktivieren und trotzdem kollidieren sie nicht mit dem Postgres-Container workflows-db
.
Alles läuft auf meinem lokalen Notebook, also kann es keine Verwechslung mit dem Host geben.
Meine Docker Version ist:
docker --version
Docker version 1.10.3, build 20f81dd
UPDATE 2: Dieser Zusammenhang wird auf Andockfenster Parameter SETZEN. Wenn Sie diese Zeile in Ihre Dockerdatei schreiben und den Container mit -p ausführen, wird der Port in Netstat angezeigt. Wenn Sie -p verwenden, aber nicht EXPOSE schreiben, wird Ihr Port nicht von netstat aufgelistet.
Dank für Ihre ausführliche Antwort danken. Ich habe jeden von Ihnen vorgeschlagenen Check gemacht und die Ergebnisse in meine Frage geschrieben (siehe Update). Docker-Ports werden von netstat nicht gemeldet, obwohl sie definitiv funktionieren. –
Ich fühle mich wie es mit DOCKER 'EXPOSE' Parameter verwandt ist. Wenn Sie diese Zeile in Ihre Dockerdatei schreiben und den Container mit "-p" ausführen, wird der Port in Netstat angezeigt. Wenn Sie '-p' verwenden, aber' EXPOSE' nicht schreiben, wird Ihr Port nicht von netstat aufgelistet. Habe diese Hypothese noch nicht getestet. –