2016-04-06 20 views
13

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.

risposta

2

netstat deve visualizzare le porte esposte. Ecco un esempio

[email protected]:docker$ sudo netstat -at|grep 3030 
[email protected]:docker$ docker ps 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES 
[email protected]:docker$ docker run -d -p 3030:80 httpd:2.4 
4310ac5fbdbc7314ab4d23e34099a710a3a8790dcf2c6d0a84202c1de5c9fd30 
[email protected]:docker$ docker ps 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS     NAMES 
4310ac5fbdbc  httpd:2.4   "httpd-foreground" 3 minutes ago  Up 3 minutes  0.0.0.0:3030->80/tcp hungry_fermat 
[email protected]:docker$ sudo netstat -at|grep 3030 
tcp6  0  0 [::]:3030    [::]:*     LISTEN 
[email protected]:docker$ sudo netstat -tulpn|grep 3030 
tcp6  0  0 :::3030     :::*     LISTEN  10294/docker-proxy 
[email protected]:docker$ 

Alcune cose fondamentali che dovete verificare voi stessi:

  1. sono in esecuzione netstat con privilegi elevati? Qualcosa potrebbe mancare quando non sei root
  2. Il contenitore docker è in esecuzione sullo stesso host previsto? Verificare con docker ps
  3. Il numero docker ps elenca il port forwarding? Come da quanto sopra, si dovrebbe essere in grado di vedere qualcosa di simile 0.0.0.0:3030->80/tcp

Si noti inoltre che, la finestra mobile-proxy è quella in esecuzione sull'host. Tutti i comandi precedenti presuppongono che si esegua su linux. Questo è stato testato con Ubuntu 15.10

Se vi sentite ancora ti manca l'inoltro, quindi si prega di inviare di nuovo il sistema operativo, la versione finestra mobile ecc

Grazie,

+1

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

+1

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

Problemi correlati