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

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

Barbara Streisand
Barbara Streisandoriginal
2024-11-12 01:43:02887parcourir

Why am I getting ECONNREFUSED when connecting to MySQL container from my Node.js application?

Node.js ECONNREFUSED lors de la connexion au conteneur Docker MySQL

Dans une configuration de composition Docker impliquant un conteneur MySQL et un service Web Node.js , la connexion à MySQL à partir de Node.js a entraîné l'erreur ECONNREFUSED, malgré un lien Docker établi et des paramètres de base de données correctement configurés.

Énoncé du problème

Le problème provenait de un malentendu sur le mappage des ports Docker. Dans le fichier de composition Docker :

ports:
  - "3307:3306"

Cela mappe le port hôte 3307 au port conteneur 3306. Bien que cela permette un accès externe à la base de données du conteneur MySQL depuis l'hôte, cela ne modifie pas le port interne du conteneur. écoute.

Solution

Pour résoudre le problème, la configuration Node.js et la commande Docker ont été ajustées :

Node.js Configuration

const config = {
    host: 'mysql', // Use the Docker service name instead of 'localhost'
    database: 'mydb',
    port: '3306', // Connect to the container's native port
    user: 'mysql',
    password: '1234',
    connectionLimit: 10
}

Commande Docker

command: ["./wait-for-it.sh", "mysql:3306"] // Wait for the MySQL container to start on port 3306

Explication

En utilisant le nom du service Docker ( mysql) en tant qu'hôte dans la configuration Node.js, nous veillons à ce que la tentative de connexion soit effectuée vers le conteneur, et non vers l'hôte. De plus, en changeant l'argument du script wait-for-it en 3306, nous attendons que MySQL soit prêt sur son port natif dans le conteneur.

Une fois ces modifications implémentées, l'erreur ECONNREFUSED a été résolue et le L'application Node.js a pu se connecter avec succès au conteneur MySQL Docker.

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!

Déclaration:
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