Cette réponse est pour la version 2 de docker-compose et elle fonctionne également sur la version 3
Vous pouvez toujours accéder aux données lorsque vous utilisez depend_on.
Si vous regardez les documents Docker Docker Compose et Django , vous pouvez toujours accéder à la base de données comme ceci:
version: '2'
services:
db:
image: postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
Quelle est la différence entre les liens et depend_on?
liens:
Lorsque vous créez un conteneur pour une base de données, par exemple:
docker run -d --name=test-mysql --env="MYSQL_ROOT_PASSWORD=mypassword" -P mysql
docker inspect d54cf8a0fb98 |grep HostPort
Et vous trouverez peut-être
"HostPort": "32777"
Cela signifie que vous pouvez connecter la base de données à partir de votre port localhost 32777 (3306 dans le conteneur), mais ce port change à chaque redémarrage ou suppression du conteneur. Vous pouvez donc utiliser des liens pour vous assurer de toujours vous connecter à la base de données et ne pas avoir à savoir de quel port il s'agit.
web:
links:
- db
dépend de:
J'ai trouvé un joli blog de Giorgio Ferraris Docker-compose.yml: de V1 à V2
Lorsque docker-compose exécute des fichiers V2, il crée automatiquement un réseau entre tous les conteneurs définis dans le fichier, et chaque conteneur pourra immédiatement se référer aux autres en utilisant simplement les noms définis dans le fichier docker-compose.yml.
Et
Nous n'avons donc plus besoin de liens; des liens ont été utilisés pour démarrer une communication réseau entre notre conteneur db et notre conteneur de serveur web, mais cela est déjà fait par docker-compose
Mettre à jour
Dépendance express entre services, ce qui a deux effets:
docker-compose up
démarrera les services dans l'ordre de dépendance. Dans l'exemple suivant, db et redis seront démarrés avant Web.
docker-compose up SERVICE
inclura automatiquement les dépendances de SERVICE. Dans l'exemple suivant, docker-compose up web créera et démarrera également db et redis.
Exemple simple:
version: '2'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
Remarque: depend_on n'attendra pas que db et redis soient «prêts» avant de démarrer Web - uniquement jusqu'à ce qu'ils aient été démarrés. Si vous devez attendre qu'un service soit prêt, voir Contrôle de l'ordre de démarrage pour plus d'informations sur ce problème et les stratégies pour le résoudre.
--link
indicateur est désormais une fonctionnalité héritée obsolète de Docker et la documentation suggère "Il peut éventuellement être supprimé" Docker: Liens de conteneur hérités . Il est conseillé de ne pas utiliser la fonction de réseaux Docker ou la méthode de composition Docker . Je pensais que cela serait utile à quiconque ici se renseignerait sur cette fonctionnalité.