dns - servidores - ¿Cómo llegar a los contenedores de la ventana acoplable por nombre en lugar de la dirección IP?
que dns usar (6)
¿Hay alguna forma de acceder a los contenedores de mi docker usando nombres en lugar de direcciones IP?
He oído hablar de tuberías y he visto algunas opciones de tipo dns y de nombre de host para la ventana acoplable, pero todavía no puedo juntar todo.
Gracias por tu tiempo.
No estoy seguro de si esto es útil, pero esto es lo que he hecho hasta ahora:
- host host contenedor de docker instalado utilizando docker-machine y el controlador vmwarevsphere
- Arrancamos todos los servicios con docker-compose.
- Puedo acceder a todos los servicios desde cualquier otra máquina en la red usando IP y puerto
He agregado una entrada de alias de DNS a mi servidor de red privada DNS y coincide con el nombre de la máquina que utiliza docker-machine. Pero la máquina siempre toma una dirección IP diferente cuando arranca y se conecta a la red.
Estoy perdido en cuanto a dónde abordar esto:
- servidor DNS de red
- docker-machine nombre de host
- nombre de host del contenedor docker
- Probablemente alguna combinación de todos ellos
Probablemente estoy buscando algo similar a esta pregunta:
Cualquier dirección general será impresionante ... gracias de nuevo!
Cambié el parámetro --net
con el parámetro --network
y se ejecuta como se esperaba:
docker network create <network name>
docker run --network <network name> --name <container name> <other container options>
docker run --network <network name> --name <container name> <other container options>
Cree una nueva red de puente que no sea docker0, ejecute sus contenedores dentro de ella y puede hacer referencia a los contenedores dentro de esa red por sus nombres.
El demonio Docker ejecuta un servidor DNS incorporado para proporcionar el descubrimiento automático de servicios para contenedores conectados a redes definidas por el usuario. Las solicitudes de resolución de nombres de los contenedores son manejadas primero por el servidor DNS incorporado.
Prueba esto:
docker network create <network name>
docker run --net <network name> --name test busybox nc -l 0.0.0.0:7000
docker run --net <network name> busybox ping test
Primero, creamos una nueva red. Luego, ejecutamos un contenedor de busybox llamado escucha de prueba en el puerto 7000 (solo para mantenerlo en funcionamiento). Finalmente, hacemos ping al contenedor de prueba por su nombre y debería funcionar.
EDITAR 2018-02-17: Docker puede eliminar la clave de links
de docker-compose, por lo tanto, sugieren usar redes definidas por el usuario como se indica aquí => https://docs.docker.com/compose/compose-file/#links
Suponiendo que desea acceder al contenedor mysql
desde el contenedor web
de su archivo docker-compose.yml
, como:
web:
build: .
links:
- mysql
mysqlservice:
image: mysql
Le complacerá saber que Docker Compose ya agrega un nombre de dominio mysqlservice
(en el contenedor web
/etc/hosts
) que apunta al contenedor mysql
.
En lugar de buscar la dirección IP del contenedor mysql
, puede usar el nombre de dominio mysqlservice
.
Si desea agregar nombres de dominio personalizados, también es posible con el parámetro extra_hosts .
Es posible que desee probar dnsdock. Parece sencillo y fácil de configurar (!). Eche un vistazo a http://blog.brunopaz.net/easy-discover-your-docker-containers-with-dnsdock/ y https://github.com/tonistiigi/dnsdock .
Si desea una solución lista para usar , es posible que desee verificar, por ejemplo, Kontena . Viene con tecnología de superposición de red de Weave y esta tecnología se utiliza para crear redes de LAN privadas virtuales entre servicios. Gracias a esto, se puede acceder a todos los servicios / contenedores mediante service_name.kontena.local
.
Docker 1.10
tiene un DNS incorporado. Si sus contenedores están conectados a la misma red definida por el usuario (cree una red docker network create my-network
y ejecute su contenedor con --net my-network
), pueden hacer referencia entre ellos utilizando el nombre del contenedor. ( Docs ).
¡Guay!
Una advertencia: si utiliza Docker compose, sabrá que agrega un prefijo a los nombres de sus contenedores, es decir, <project name>_<service name>-#
. Esto hace que los nombres de sus contenedores sean un poco más difíciles de controlar, pero podría estar bien para su caso de uso. Puede anular la función de nomenclatura de composición de la ventana acoplable configurando manualmente el nombre del contenedor en su plantilla de composición, pero luego no podrá escalar con la composición .