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
Libérer: 2024-11-12 01:43:02
original
882 Les gens l'ont consulté

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

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

Commande Docker

command: ["./wait-for-it.sh", "mysql:3306"] // Wait for the MySQL container to start on port 3306
Copier après la connexion

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal