tutorial hub funciona empezando ejemplos desde con como comandos cero docker docker-compose

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