Node.js ECONNREFUSED beim Herstellen einer Verbindung mit dem MySQL-Docker-Container
In einem Docker-Compose-Setup mit einem MySQL-Container und einem Node.js-Webdienst , die Verbindung zu MySQL von Node.js führte zum ECONNREFUSED-Fehler, obwohl eine Docker-Verbindung hergestellt und die Datenbankeinstellungen ordnungsgemäß konfiguriert waren.
Problembeschreibung
Das Problem hat seinen Ursprung in ein Missverständnis der Docker-Portzuordnung. In der Docker-Compose-Datei:
ports: - "3307:3306"
Dadurch wird der Host-Port 3307 dem Container-Port 3306 zugeordnet. Dies ermöglicht zwar den externen Zugriff auf die Datenbank des MySQL-Containers vom Host aus, ändert jedoch nicht den internen Port des Containers hört zu.
Lösung
Um das Problem zu beheben, wurden die Node.js-Konfiguration und der Docker-Befehl angepasst:
Node.js Konfiguration
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 }
Docker-Befehl
command: ["./wait-for-it.sh", "mysql:3306"] // Wait for the MySQL container to start on port 3306
Erklärung
Durch Verwendung des Docker-Dienstnamens ( mysql) als Host in der Node.js-Konfiguration verwenden, stellen wir sicher, dass der Verbindungsversuch zum Container und nicht zum Host erfolgt. Darüber hinaus warten wir durch Ändern des Wait-for-It-Skriptarguments auf 3306 darauf, dass MySQL an seinem nativen Port im Container bereit ist.
Sobald diese Änderungen implementiert wurden, wurde der ECONNREFUSED-Fehler behoben und die Die Node.js-Anwendung konnte erfolgreich eine Verbindung zum MySQL Docker-Container herstellen.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich ECONNREFUSED, wenn ich von meiner Node.js-Anwendung aus eine Verbindung zum MySQL-Container herstelle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!