Redes en Docker: cómo se comunican los contenedores entre sí (y con el exterior)

Publicado por reacofertas
hace 22 horas

Hola a todos. Cierro la mini-serie de conceptos básicos de Docker (comandos, Compose y volúmenes) con el tema que más me costó visualizar al principio: las redes.

Cuando levantas varios contenedores, lo normal es que necesiten hablar entre ellos: la app con la base de datos, el proxy con la app... Y la pregunta típica es: ¿por qué desde un contenedor no veo al otro?

Lo que me habría venido bien saber el primer día:

  • Por defecto los contenedores van a la red "bridge" y NO se resuelven por nombre entre sí. Por eso en Compose se crea una red propia para el proyecto: ahí cada servicio es accesible por su nombre de servicio (por ejemplo, la app conecta a "db:5432" directamente).
  • docker network create mired y luego --network mired al lanzar el contenedor hace lo mismo a mano.
  • Publicar un puerto (-p 8080:80) es lo único que expone el contenedor hacia fuera; el resto del tráfico entre contenedores no pasa por el host.
  • Para depurar: docker network ls, docker network inspect mired y lanzar un contenedor temporal con nicolaka/netshoot (o un simple alpine con wget) dentro de la misma red.
  • Los contenedores SÍ pueden salir a internet por defecto; lo que está restringido es que entren conexiones si no publicas puerto.

Lo expliqué con ejemplos paso a paso (incluido un Compose con dos servicios hablando entre sí) en mi blog: https://cursodocker.blogspot.com/2026/10/como-funciona-la-red-en-docker.html (es mi blog, lo aviso por transparencia).

¿Vosotros usáis una red por proyecto o compartís redes entre proyectos?

docker