espongo porti docker dei miei contaners alla macchina host con qualcosa di simileDocker e netstat: netstat non sta mostrando porte, esposta da contenitori docker
docker run -p 80:80 ...
poi cerco di visualizzare tutte le porte in ascolto per il debug con netstat
esempio:
netstat -at
cosa strana è che netstat non mostrerà le mie contenitori docker con porte esposte, anche se stanno ascoltando e rispondere al browser.
Come faccio a rendere netstat
quelle porte esposte?
UPDATE: Io corro questo su Debian 8 Jessie. Ecco quello che faccio:
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
Qui docker rapporti che porti container vengono inoltrate all'host. Inoltre, se smetto di container workflows-nginx
, smette di rispondere al browser tramite http (porta 80). Se lo avvio di nuovo, inizia a rispondere di nuovo.
Ecco l'output di 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
Come si può vedere, né la porta 80, né la porta 443 sono riportati. La porta 8000 di workflows-django
per qualche motivo viene aperta sull'interfaccia IPv6. Inoltre, ho dimenticato di disabilitare Postgres sulla macchina host e ancora non si scontrano con il contenitore Postgres workflows-db
.
Tutto è in esecuzione sul mio notebook locale, quindi suppongo che non ci possa essere alcuna confusione con l'host.
La mia versione finestra mobile è:
docker --version
Docker version 1.10.3, build 20f81dd
UPDATE 2: Questo è legato alla finestra mobile ESPORRE parametro. Se scrivi questa riga nel tuo dockerfile ed esegui il contenitore con -p, la porta sarà visibile in netstat. Se si utilizza -p ma non si scrive EXPOSE, la porta non verrà elencata da netstat.
Grazie per la risposta dettagliata. Ho fatto tutti i controlli che hai suggerito e ho scritto i risultati nella mia domanda (vedi aggiornamento). Tuttavia, le porte docker non vengono segnalate da netstat, sebbene funzionino sicuramente. –
Mi sembra che sia correlato al parametro 'EXPOSE' della finestra mobile. Se scrivi questa riga nel tuo dockerfile ed esegui il contenitore con '-p', la porta sarà visibile in netstat. Se usi '-p' ma non scrivi' EXPOSE', la tua porta non sarà elencata da netstat. Non ho ancora testato questa ipotesi. –