Estoy configurando mi entorno de desarrollo local con contenedores Docker. El docker-compose.yml es como seguir
version: '2'
services:
db:
image: mongo:3
mq:
image: rabbitmq:3
api:
build: .
image: my_app/api
ports:
- "3000:3000"
links:
- db
- mq
environment:
- NODE_ENV=development
Comienza sin errores. Y Docker enumera 3 contenedores en ejecución
docker-compose up -d
docker ps
e90e5a8b5d33 my_app/api "/usr/local/bin/node " 0.0.0.0:3000->3000/tcp my_app_api_1
42bfcd971b16 mongo:3 "/entrypoint.sh mongo" 27017/tcp my_app_db_1
a0685a816c47 rabbitmq:3 "/docker-entrypoint.s" 4369/tcp, 5671-5672/tcp, 25672/tcp my_app_mq_1
Sin embargo, cuando trato de vincularme a esos contenedores en ejecución desde otro contenedor
docker run --link my_app_mq_1:mq --link my_app_db_1:db -it worker
Me sale un error
docker: Error response from daemon: Cannot link to /my_app_mq_1, as it does not belong to the default network.
Yo tambien he probado
docker run --link my_app_mq_1:mq --link my_app_db_1:db -it --net default worker
Mismo error.
Entonces, ¿cómo puedo vincularme a un contenedor en ejecución iniciado por docker-compose?
fuente
--net
antes del comando. Encontré este problema al intentar ejecutar la imagen oficial de la ventana acoplable de redis.mi comando para ejecutar enlaces
fuente
Cuando usa la definición de servicio versión 2 y más,
docker-compose
crea una red definida por el usuario. La resolución de nombres en una red definida por el usuario funciona a través del servidor DNS integrado de Docker. Aquí está la cita relacionada de la documentación :Los contenedores también están disponibles mediante los alias de red que
docker-compose
crea. Se puede verificar mediante un comando como:Imprime
["db","$CONTAINER_ID"]
.Proporcionar enlaces con
--link
no tendrá ningún efecto en el caso de una red definida por el usuario existente. Puede asegurarse y mirar/etc/hosts
, que no tendrá las líneas correspondientes.Por tanto, el siguiente comando es suficiente:
fuente