Connexion au conteneur Docker MySQL : résolution d'ECONNREFUSED
Cet article traite de l'erreur ECONNREFUSED fréquemment rencontrée lors de la tentative de connexion à un conteneur Docker MySQL à partir de Node.js.
Contexte
Dans une application Dockerisée multi-conteneurs, il est courant d'avoir un conteneur de base de données (par exemple, MySQL) et de s'y connecter à partir d'autres conteneurs (par exemple, application Web Node.js). Cependant, cette connexion peut échouer avec une erreur ECONNREFUSED, signalant que l'application Node.js ne peut pas atteindre la base de données.
Comprendre le problème
Lors de la configuration des conteneurs Docker, le port la cartographie est cruciale. Une idée fausse courante est que le mappage de ports, tel que « 3307 : 3306 », signifie que le conteneur écoute sur le port 3307. Cependant, les conteneurs écoutent généralement sur leurs ports internes. Dans le cas de MySQL, il écoute sur le port 3306 au sein du conteneur.
Solution : modifier la configuration de Node.js et le DNS
Pour résoudre ce problème, modifiez le fichier Node.js. Configuration .js pour se connecter à la base de données sur le port 3306 et spécifier le DNS correct. Dans ce cas, le DNS est 'mysql', tel que défini dans le docker-compose.yml.
Cela met à jour la configuration de Node.js comme suit :
const config = { host: 'mysql', // Replace 'localhost' with the container DNS database: 'mydb', port: '3306', user: 'mysql', password: '1234', connectionLimit: 10 }
De plus, modifiez le commande dans le docker-compose.yml :
command: ["./wait-for-it.sh", "mysql:3306"] // Update the port number
Cela garantit que le script "wait-for-it.sh" attend que MySQL écoute sur le port 3306 dans le conteneur.
Conclusion
En comprenant le mécanisme de mappage des ports et en mettant à jour la configuration Node.js et le DNS, il est possible de résoudre l'erreur ECONNREFUSED et d'établir une connexion réussie entre l'application Node.js et MySQL. conteneur dans un environnement Dockerisé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!