¿Cada contenedor tiene su propia dirección IP?

Dependerá de qué controlador de red haya utilizado. Docker crea un SDN cuando lo instala en un nodo. El SDN se usa para conectar contenedores entre sí y con las redes host. AFAIK esto es básicamente facilitado por la instalación de espacio de nombres de red de los núcleos de Linux.

Cuando ejecuta un contenedor, utiliza una (o más) de las siguientes opciones para el controlador de red:

  1. puente: esto es básico y predeterminado en donde cada contenedor obtendrá una dirección IP en una VLAN SDN en el host. Pero la IP del contenedor no será accesible desde el exterior.
  2. host: esto va a emular la red del host en el contenedor y el contenedor utilizará la misma interfaz que la del host. IP sería accesible desde el exterior.
  3. none: el contenedor no tendrá ninguna función de red habilitada y será
  4. Superposición: esta es una red que abarcaría varios hosts y solo se puede usar cuando se ejecuta en nodos en modo enjambre. Piense en esto como una red puente para un grupo de nodos

Para leer más

[1] Redes de contenedores Docker

[2] Trabajar con comandos de red

[3] Contenedores de red