Pregunta:
Me gustaría ejecutar un contenedor Docker que solo exponga sus puertos INTERNAMENTE dentro de la instancia de Docker en dicho host. Esto significa que NO lo quiero público.
¿Cómo se hace esto desde la línea de comandos? El siguiente código lo abre públicamente.
docker run -p 27017:27017 --name mongo mongo
Respuesta:
Si ejecuta:
docker run -p 27017:27017 --name mongo mongo
Luego, Docker lo interpreta como:
docker run -p 0.0.0.0:27017:27017 --name mongo mongo
Lo que significa que el puerto es accesible desde el host, pero también desde el exterior.
Puede verificarlo ejecutando nmap -p 27017 <host IP>
desde una máquina diferente contra su host. El puerto 27017 debería aparecer como 'abierto'.
Si ejecuta:
docker run -p 127.0.0.1:27017:27017 --name mongo mongo
Entonces, solo se puede acceder al puerto desde el host.
Puede verificarlo ejecutando nmap -p 27017 <host IP>
desde una máquina diferente contra su host. El puerto 27017 debería aparecer como "cerrado".
Finalmente, si ejecuta:
docker run --name mongo mongo
Entonces, todos los puertos serán locales para el contenedor.
Nuevamente, puede verificar eso ejecutando nmap
en su host contra el contenedor: nmap -p 27017 <container IP>
. El puerto 27017 debería aparecer como "cerrado".