web-dev-qa-db-fra.com

Comment un conteneur Docker peut-il appeler un autre conteneur Docker

J'ai deux conteneurs Docker

  1. Une API Web
  2. Une application console qui appelle l'API Web

Maintenant, sur mon API Web locale, l'application hôte et console locale n'a aucun problème pour appeler l'API.Cependant, je ne sais pas quand ces deux choses sont Dockerized, comment puis-je éventuellement rendre l'URL de l'API Dockerized disponible pour l'application Dockerized Console?

je ne pense pas avoir besoin d'un Docker Compose car je passe l'URL de l'API comme argument de l'API, donc c'est juste la question de s'assurer que le Dockerized API's l'url est accessible par Dockerized Console

Des idées?

7
Lost

Le problème peut être résolu facilement si vous utilisez la fonction de composition. Avec compose, vous créez simplement un fichier de configuration (docker-compose.yml) comme ça :

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

Pour le faire fonctionner, il suffit d'appeler up comme ceci:

docker-compose up 

C'est la meilleure façon d'exécuter toute votre pile, alors vérifiez cette référence: https://docs.docker.com/compose/

Succès!

2
Imam Digmi

Vous pouvez utiliser l'option link avec docker run:

Exécutez l'API:

docker run -d --name api api_image

Exécutez le client:

docker run --link api busybox ping api

Vous devriez voir que api peut être résolu par docker.

Cela dit, en allant avec docker-compose est toujours une meilleure option.

5
lang2

L'idée n'est pas de passer l'url, mais le nom d'hôte de l'autre conteneur que vous souhaitez appeler.
Voir Mise en réseau dans Compose

Par défaut, Compose configure un réseau unique pour votre application. Chaque conteneur d'un service rejoint le réseau par défaut et est à la fois accessible par d'autres conteneurs sur ce réseau et détectable par eux à un nom d'hôte identique au nom du conteneur.

C'est ce qui remplace le obsolète --link option .

Et si vos conteneurs ne s'exécutent pas sur un seul nœud de serveur Docker, Docker Swarm Mode permettrait cette découverte sur plusieurs nœuds.

5
VonC