J'essaie de vous connecter à MySQL DB à l'aide d'un programme Python. Lorsqu'il fonctionne localement, cela fonctionne.
Mais tout en dockerisant l'application que j'ai créée, un conteneur est destiné au code Python et à l'autre pour le MySQL DB, lorsque je suis de cette manière qu'il ne connecte pas. P>
python_code : P>
version: "3"
services:
app:
image: app:latest
links:
- db
ports:
- "8001:8081"
environment:
- DB_HOST= db
db:
image: mysql:5.7.26
restart: always
environment:
MYSQL_DATABASE: 'my_db'
MYSQL_USER: 'docker_root'
MYSQL_PASSWORD: 'password'
MYSQL_ROOT_PASSWORD: 'password'
ports:
- "3306:3306"
volumes:
- ./DB_config/:/etc/mysql/mysql.conf.d
3 Réponses :
Essayez d'utiliser le port de conteneur aussi, ajoutez 3306 code> - dépend_on code> attribut, vous pouvez supprimer les liens Code> Attribut - P> depends_on:
- db
toujours la même erreur. J'ai édité la question - selon cette réponse,
Essayez d'ajouter dépend_on code> ainsi que puis exécutez la composition à nouveau.
Même ça n'a pas aidé :(
Vous pouvez utiliser DEPEND_ON DRAPORT comme mentionné dans la réponse acceptée. Si cela ne résout pas votre problème, ils utilisent cette approche.
Après avoir démarré le conteneur, votre serveur tentera de vous connecter au serveur de base de données. Parfois, le serveur de base de données peut prendre un certain temps pour démarrer et dans cette fenêtre, si le serveur essaie de se connecter au serveur de base de données, il est confronté à des problèmes. Essayez d'ajouter une logique à reconnecter le serveur de base de données après quelques secondes si la connexion échoue. P>
try{
connectToDatabase();
}catch(error){
waitForHalfMinute();
connectToDatabase();
}
Est-ce la même logique que nous utilisons tout en faisant dépend_on code> dans le fichier de composition? @ VivekyAdv4?
Dépend_on fonctionne partiellement, une fois que vous avez démarré la base de données de la base de données, Server commencera. Il ne vérifiera pas si le port est ouvert ou non, c'est-à-dire que la base de données est en réalité ou non. Si votre instance de base de données prend du temps pour démarrer que dépend de la dépendance.
Avons-nous un moyen de gérer cela dans le fichier de composition?
Pas sûr de cela, mais probablement non, car j'ai fait face à ce problème et creusé beaucoup par la documentation Docker pour elle
Je vous recommanderais de quitter votre application au cas où il ne peut pas se connecter à MySQL et définir la stratégie de redémarrage pour toujours, car dépend_on code> ne garantit pas que MySQL sera totalement upée lorsque App commence mais il est bon de l'avoir bien. try:
db.bind(provider='mysql', user='docker_root', password='password', host='db', database=database, port = 3306)
except:
# write some logs
exit(1)
Pouvez-vous me dire exactement ce qui se passe lorsque nous utilisons dépend?
dépend_on code> ne attend pas votre cas-- pour dB code> pour être prêt, il ne garantit que le service dB code> est démarré avant App code> mais il ne garantit pas que dB code> sera prêt. Cochez cette case docs.docker.com/commose/commound-file et vérifier la note qui dit:> "Il y a plusieurs choses à conscience de l'utilisation de Depends_on"
Un exemple serait que le conteneur pour db code> démarre, puis app code> démarrera mais dB code> processus de démarrage peut prendre un certain temps par E.G. 3 secondes, donc app code> essaiera de se connecter à quelque chose qui commence toujours
Si vous exécutez Docker-compose application code>, il démarrera également dB code>, mais c'est à peu près tout ce qu'il fait. Il commencera à démarrer dB code> avant de démarrer la démarrage code> mais comme d'autres ont noté que le démarrage MySQL peut prendre un certain temps.