Comunicación entre múltiples proyectos de Docker-Compose

Resuelto Jivan asked hace 8 años • 20 respuestas

Tengo dos docker-compose.ymlarchivos separados en dos carpetas diferentes:

  • ~/front/docker-compose.yml
  • ~/api/docker-compose.yml

¿Cómo puedo asegurarme de que un contenedor frontpueda enviar solicitudes a un contenedor en api?

Sé que esa --default-gatewayopción se puede configurar usando docker runpara un contenedor individual, de modo que se pueda asignar una dirección IP específica a este contenedor, pero parece que esta opción no está disponible cuando se usa docker-compose.

Actualmente termino haciendo un docker inspect my_api_container_idy miro la puerta de enlace en la salida. Funciona, pero el problema es que esta IP se atribuye aleatoriamente, por lo que no puedo confiar en ella.

Otra forma de esta pregunta podría ser:

  • ¿Puedo atribuir una dirección IP fija a un contenedor en particular usando Docker-Compose?

Pero al final lo que estoy cuidando es:

  • ¿Cómo pueden comunicarse entre sí dos proyectos diferentes de Docker-Compose?
Jivan avatar Jun 29 '16 07:06 Jivan
Aceptado

Sólo necesita asegurarse de que los contenedores con los que desea comunicarse entre sí estén en la misma red. Las redes son una construcción acoplable de primera clase y no son específicas de componer.

# front/docker-compose.yml
version: '2'
services:
  front:
    ...
    networks:
      - some-net
networks:
  some-net:
    driver: bridge

...

# api/docker-compose.yml
version: '2'
services:
  api:
    ...
    networks:
      - front_some-net
networks:
  front_some-net:
    external: true

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 reside; en este caso, front_se agregó un prefijo.

Luego podrán hablar entre sí utilizando el nombre del servicio. De frontpuedes hacer ping apiy viceversa.

johnharris85 avatar Jun 29 '2016 01:06 johnharris85

ACTUALIZACIÓN: A partir de la versión 3.5 del archivo de redacción:

Esto ahora funciona:

version: "3.5"
services:
  proxy:
    image: hello-world
    ports:
      - "80:80"
    networks:
      - proxynet

networks:
  proxynet:
    name: custom_network

docker-compose up -dse unirá a una red llamada 'custom_network'. ¡Si no existe, será creado!

root@ubuntu-s-1vcpu-1gb-tor1-01:~# docker-compose up -d
Creating network "custom_network" with the default driver
Creating root_proxy_1 ... done

Ahora puedes hacer esto:

version: "2"
services:
  web:
    image: hello-world
    networks:
      - my-proxy-net
networks:
  my-proxy-net:
    external:
      name: custom_network

Esto creará un contenedor que estará en la red externa.

Todavía no puedo encontrar ninguna referencia en los documentos, ¡pero funciona!

cstrutton avatar Dec 29 '2017 14:12 cstrutton

Solo una pequeña adición a la gran respuesta de @johnharris85: cuando ejecuta un archivo de redacción acoplable, defaultse crea una " " red para que pueda agregarla al otro archivo de redacción como una red externa:

# front/docker-compose.yml 
version: '2' 
  services:   
    front_service:
    ...

...

# api/docker-compose.yml
version: '2'
services:
  api_service:
    ...
    networks:
      - front_default
networks:
  front_default:
    external: true

Para mí, este enfoque era más adecuado porque no poseía el primer archivo de Docker-Compose y quería comunicarme con él.

Tal Joffe avatar Feb 08 '2017 13:02 Tal Joffe