Tengo algunas aplicaciones ejecutándose en una red Docker con sus puertos ( 3000 , 4200 , etc.) expuestos. También tengo un contenedor nginx que se ejecuta dentro de la misma red Docker que aloja estas aplicaciones en el puerto 80 con diferentes nombres de dominio ( site1.com , site2.com ).
Pero en este momento, si voy directamente a los puertos en los que se ejecutan las aplicaciones ( localhost:3000 ), también puedo acceder a ellos de esa manera.
¿Cómo expongo esos puertos solo al contenedor nginx y no al sistema host?
Pero ahora mismo, si voy directamente a los puertos en los que se ejecutan las aplicaciones (localhost:3000), también puedo acceder a ellos de esa manera.
Eso es porque está usando el comando -p aka --publish en la docker run
Explicación:
Si desea exponer puertos solo entre contenedores, no use -p o --publish , solo colóquelos en la misma red acoplable.
Ejemplo:
Vamos a crear una nueva red definida por el usuario:
sudo docker network create appnetVamos a crear un contenedor nginx para el proxy inverso. Debería estar disponible para el mundo exterior, por lo que usamos la publicación.
sudo docker run --name nginx -d --network appnet nginxAhora ponga sus aplicaciones en la misma red pero no exponga los puertos.
sudo docker run --name app1 -d --network appnet <app image name/id>