Maison > base de données > tutoriel mysql > Pourquoi est-ce que je reçois ECONNREFUSED lors de la connexion à un conteneur Docker MySQL à partir de Node.js ?

Pourquoi est-ce que je reçois ECONNREFUSED lors de la connexion à un conteneur Docker MySQL à partir de Node.js ?

DDD
Libérer: 2024-11-10 22:22:03
original
175 Les gens l'ont consulté

Why Am I Getting ECONNREFUSED When Connecting to a MySQL Docker Container from Node.js?

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
}
Copier après la connexion

De plus, modifiez le commande dans le docker-compose.yml :

command: ["./wait-for-it.sh", "mysql:3306"]  // Update the port number
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal