Solución:
Estibador 1.10
tiene un DNS incorporado. Si sus contenedores están conectados al mismo usuario definido red (crea una red docker network create my-network
y ejecuta tu contenedor con --net my-network
) pueden hacer referencia entre sí utilizando el nombre del contenedor. (Documentos).
¡Frio!
Una advertencia si está utilizando Docker compose, sabe 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 algo 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 redacción, pero luego no podrá escalar con redactar.
Cree una nueva red puente que no sea docker0, ejecute sus contenedores dentro de ella y podrá hacer referencia a los contenedores dentro de esa red por sus nombres.
El demonio de Docker ejecuta un servidor DNS integrado para proporcionar detección automática 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 integrado.
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 busybox llamado prueba escuchando en el puerto 7000 (solo para que siga funcionando). Finalmente, hacemos ping al contenedor de prueba por su nombre y debería funcionar.
EDITAR 2018-02-17: Docker puede eventualmente eliminar el links
clave 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 quiere llegar al mysql
contenedor de la web
contenedor de tu docker-compose.yml
archivo, como:
web:
build: .
links:
- mysql
mysqlservice:
image: mysql
Le complacerá saber que Docker Compose ya agrega un mysqlservice
nombre de dominio (en el web
envase /etc/hosts
) que apuntan al mysql
envase.
En lugar de buscar el mysql
dirección IP del contenedor, puede utilizar la mysqlservice
nombre de dominio.
Si desea agregar nombres de dominio personalizados, también es posible con el parámetro extra_hosts.