usar tutorial run puertos mapeo implementar hub ejemplos desde como cero docker netstat

tutorial - Docker y netstat: netstat no muestra puertos, expuestos por contenedores docker



mapeo de puertos docker (1)

netstat debe mostrar los puertos expuestos. Aquí hay un ejemplo

anovil@anovil-Latitude-E6440:docker$ sudo netstat -at|grep 3030 anovil@anovil-Latitude-E6440:docker$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES anovil@anovil-Latitude-E6440:docker$ docker run -d -p 3030:80 httpd:2.4 4310ac5fbdbc7314ab4d23e34099a710a3a8790dcf2c6d0a84202c1de5c9fd30 anovil@anovil-Latitude-E6440: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 anovil@anovil-Latitude-E6440:docker$ sudo netstat -at|grep 3030 tcp6 0 0 [::]:3030 [::]:* LISTEN anovil@anovil-Latitude-E6440:docker$ sudo netstat -tulpn|grep 3030 tcp6 0 0 :::3030 :::* LISTEN 10294/docker-proxy anovil@anovil-Latitude-E6440:docker$

Algunas cosas básicas que necesita para verificar usted mismo:

  1. ¿Está ejecutando netstat con privilegios elevados? Algunas cosas pueden perderse cuando no eres root
  2. ¿Se está ejecutando el contenedor de la ventana acoplable en el mismo host que espera? Consulte con docker ps
  3. ¿El docker ps enumera el reenvío de puertos? Como en el ejemplo anterior, debería poder ver algo como esto 0.0.0.0:3030->80/tcp

También tenga en cuenta que, el docker-proxy es el que se ejecuta en el host. Todos los comandos anteriores asumen que se ejecuta en Linux. Esto fue probado con ubuntu 15.10

Si aún cree que le falta el reenvío, devuelva su sistema operativo, la versión de la ventana acoplable, etc.

Gracias,

Expongo los puertos de la ventana acoplable de mis contadores al equipo host con algo como

docker run -p 80:80 ...

luego trato de mostrar todos los puertos de escucha para fines de depuración con netstat por ejemplo:

netstat -at

Lo extraño es que netstat no mostrará mis contenedores docker con puertos expuestos, aunque están escuchando y respondiendo al navegador.

¿Cómo hago que netstat muestre esos puertos expuestos?

ACTUALIZACIÓN: Estoy ejecutando esto en Debian 8 Jessie. Esto es lo que hago:

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

Aquí, la ventana acoplable informa que los puertos de contenedor se reenvían al host. Por otra parte, si detengo el workflows-nginx contenedor workflows-nginx , deja de responder al navegador mediante http (puerto 80). Si vuelvo a empezar, vuelve a responder.

Aquí está la salida de sudo netstat -at | less 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

Como puede ver, no se notifica el puerto 80 ni el puerto 443. El puerto 8000 de workflows-django de workflows-django se abre por alguna razón en la interfaz IPv6. Además, me olvidé de deshabilitar postgres en la máquina host y aún así no chocan con los workflows-db contenedores de postgres workflows-db .

Todo se ejecuta en mi cuaderno local, así que supongo que no puede haber ninguna confusión con el host.

Mi versión docker es:

docker --version Docker version 1.10.3, build 20f81dd

RESPUESTA: Esto está relacionado con el parámetro EXPOSE de la ventana acoplable. Si escribe esta línea en su archivo docker y ejecuta el contenedor con -p, el puerto estará visible en netstat. Si usa -p pero no escribe EXPOSE, su puerto no será listado por netstat.