linux docker

linux - ¿Qué significa localhost dentro de un contenedor Docker?



(2)

Digamos, si uso este comando dentro de un contenedor docker.

/opt/lampp/bin/mysql -h localhost -u root -pThePassword

¿A qué se referiría el localhost aquí? ¿La IP de la máquina host o la propia IP del contenedor de la ventana acoplable?


Definitivamente, será su contenedor, si está ejecutando el comando en el contenedor.

/opt/lampp/bin/mysql -h localhost -u root -pThePassword

Si ejecuta este comando dentro del contenedor, intentará conectar mysql que se ejecuta dentro del contenedor.


Desde el interior de un contenedor , localhost siempre se refiere al contenedor actual. Nunca se refiere a otro contenedor, y nunca se refiere a otra cosa que se ejecute en su sistema físico que no esté en el mismo contenedor. Generalmente no es útil hacer conexiones salientes a localhost o configurar localhost como su host de base de datos.

Desde un shell en su sistema host , localhost podría referirse a los demonios que se ejecutan en su sistema fuera de Docker, o a los puertos que ha publicado con las opciones de docker run -p .

Desde un sistema diferente , localhost refiere al sistema desde el que se llama.

En términos de direcciones IP , localhost siempre es 127.0.0.1, y esa dirección IP es especial y siempre es localhost y se comporta de la misma manera que antes.

Si quieres hacer una conexión a un contenedor ...

... desde otro contenedor , la mejor manera es asegurarse de que estén en la misma red Docker (los inició desde el mismo archivo YAML de Docker Compose; docker network create una docker network create y luego docker run --net ... .en la misma red) y use el servicio DNS interno de Docker para referirse a ellos por el --name del contenedor o su nombre en el archivo YAML de Docker Compose y el número de puerto dentro del contenedor. Incluso si el destino tiene un puerto publicado con una opción de docker run -p o la configuración Docker Compose ports: , use el segundo número de puerto (interno del contenedor).

... desde el espacio exterior de Docker , asegúrese de haber iniciado el contenedor con una opción de ports: docker run -p o Docker Compose ports: y conéctese a la dirección IP o al nombre DNS del host utilizando el primer número de puerto de esa opción.

... desde una ventana de terminal o navegador en el mismo host físico , no en un contenedor, en este caso y solo en este caso, localhost funcionará de manera consistente.

Excepto:

Si inició un contenedor con --net host , localhost refiere al host físico, y está en la "ventana de terminal en el mismo host físico".

Si se ha esforzado por tener varios servidores en el mismo contenedor, puede usar localhost para comunicarse entre ellos.

Si está ejecutando en Kubernetes, y tiene varios contenedores en el mismo pod, puede usar localhost para comunicarse entre ellos. Entre los pods, debe configurar un servicio delante de cada pod / implementación, y usar los nombres DNS del formulario service-name.namespace-name.svc.cluster.local .