hub - dockerfile ejemplos
No se puede vincular a un contenedor en ejecuciĆ³n iniciado por docker-compose (3)
Estoy configurando mi entorno de desarrollo local con contenedores acoplables. 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 error. 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 intento vincular 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.
También he intentado
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?
Cuando utiliza la versión de definición de servicio 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 incorporado de Docker.
Aquí hay una cita relacionada de la
documentation
:
El servidor DNS incorporado de Docker permite la resolución de nombres para contenedores conectados a una red determinada [definida por el usuario]. Esto significa que cualquier contenedor conectado puede hacer ping a otro contenedor en la misma red por su nombre de contenedor.
Los contenedores también están disponibles por alias de red que crea
docker-compose
.
Se puede verificar mediante comandos como:
docker inspect /
-f ''{{json .NetworkSettings.Networks.myapp_default.Aliases}}'' my_app_db_1
Imprime
["db","$CONTAINER_ID"]
.
Proporcionar enlaces con
--link
no tendrá ningún efecto en el caso de una red existente definida por el usuario.
Puede asegurarse y mirar
/etc/hosts
, que no tendrá las líneas correspondientes.
Por lo tanto, el siguiente comando es suficiente:
docker run -it --net myapp_default worker
Ok, encontré la respuesta. En caso de que alguien más se encuentre con el mismo problema, simplemente hazlo
docker network ls
Este comando enumera todas las redes de acopladores. docker-compose creará una nueva red cuando ejecute docker-compose. En mi caso, la red se denomina myapp_default.
Nota: La red de su aplicación recibe un nombre basado en el "nombre del proyecto", que se basa en el nombre del directorio en el que vive. Puede anular el nombre del proyecto con el indicador --project-name o la variable de entorno COMPOSE_PROJECT_NAME . Redes en componer
Entonces, la forma correcta de vincular a esos contenedores es
docker run --link my_app_mq_1:mq --link my_app_db_1:db -it --net myapp_default worker
mi comando para ejecutar enlaces
docker run --network=YOUR_NETWORK --link SERVICE -t -i app command