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!