J'ai deux conteneurs Docker
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?
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!
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.
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.