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
.