¿Cómo puede un contenedor Docker llamar a otro contenedor Docker?

Resuelto Lost asked hace 7 años • 4 respuestas

Tengo dos contenedores Docker

  1. Una API web
  2. Una aplicación de consola que llama a la API web

Ahora, en mi API web local hay un host local y la aplicación de consola no tiene problemas para llamar a la API. Sin embargo, no tengo idea de cuándo se acoplan estas dos cosas, ¿cómo puedo hacer que la URL de la API acoplable esté disponible para la aplicación de consola acoplable?

No creo que necesite Docker Compose porque estoy pasando la URL de la API como argumento de la API, por lo que solo es cuestión de asegurarme de que la Dockerized API'sURL sea accesible paraDockerized Console

¿Algunas ideas?

Lost avatar May 31 '17 11:05 Lost
Aceptado

La idea no es pasar la URL, sino el nombre de host del otro contenedor al que desea llamar.
Ver redes en Redactar

De forma predeterminada, Compose configura una única red para su aplicación. Cada contenedor de un servicio se une a la red predeterminada y otros contenedores de esa red pueden acceder a él y descubrirlo en un nombre de host idéntico al nombre del contenedor.

Esto es lo que reemplaza la opción obsoleta--link .

Y si sus contenedores no se ejecutan en un solo nodo del servidor Docker, el modo Docker Swarm permitiría esa capacidad de descubrimiento en múltiples nodos.

VonC avatar May 31 '2017 04:05 VonC

Esta es la mejor manera que he encontrado para conectar varios contenedores en una máquina local/clúster único.

Dado: servicio-proveedor-de-datos, servicio-consumidor-de-datos

  • Opción 1: usar la red
docker network create data-network
docker run --name=data-provider-service --net=data-network -p 8081:8081 data-provider-image
docker run --name=data-consumer-service --net=data-network -p 8080:8080 data-consumer-image

Asegúrese de utilizar URI como: http://data-provider-service:8081/dentro de su data-consumer-service.

  • Opción 2: usar Docker Compose

Puede definir ambos servicios en un archivo docker-compose.yml y usar depends_onla propiedad en data-provider-service. p.ej

data-consumer-service:
  depends_on:
    - data-provider-service
     

Puedes ver más detalles aquí en mi publicación de Medium: https://saggu.medium.com/how-to-connect-nultiple-docker-conatiners-17f7ca72e67f

JSS avatar Jul 31 '2021 10:07 JSS

Puedes usar la linkopción con docker run:

Ejecute la API:

docker run -d --name api api_image

Ejecute el cliente:

docker run --link api busybox ping api

Deberías ver que eso apise puede resolver mediante Docker.

Dicho esto, seguir docker-composesiendo una mejor opción.

lang2 avatar May 31 '2017 04:05 lang2

El problema se puede resolver fácilmente si se utiliza la función de redacción. Con componer, simplemente crea un archivo de configuración ( docker-compose.yml) como este:

version: '3'
services:
  db:
    image: postgres
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

Para que se ejecute, simplemente llame upasí:

docker-compose up 

Esta es la mejor manera de ejecutar toda su pila, así que consulte esta referencia: https://docs.docker.com/compose/

¡Éxito!

Imam Digmi avatar Jun 01 '2017 03:06 Imam Digmi