Heim >Datenbank >MySQL-Tutorial >Warum erhalte ich ECONNREFUSED, wenn ich von Node.js aus eine Verbindung zu einem MySQL-Docker-Container herstelle?
Herstellen einer Verbindung mit einem MySQL-Docker-Container: Beheben von ECONNREFUSED
Dieser Artikel befasst sich mit dem häufig auftretenden ECONNREFUSED-Fehler beim Versuch, eine Verbindung zu einem MySQL-Docker-Container herzustellen Node.js.
Hintergrund
In einer Docker-Anwendung mit mehreren Containern ist es üblich, einen Datenbankcontainer (z. B. MySQL) zu haben und von anderen Containern aus eine Verbindung zu diesem herzustellen (z. B. Node.js-Webanwendung). Diese Verbindung kann jedoch mit einem ECONNREFUSED-Fehler fehlschlagen, was darauf hinweist, dass die Node.js-Anwendung die Datenbank nicht erreichen kann.
Verstehen des Problems
Beim Konfigurieren von Docker-Containern portieren Die Kartierung ist von entscheidender Bedeutung. Ein häufiges Missverständnis besteht darin, dass eine Portzuordnung wie „3307:3306“ bedeutet, dass der Container Port 3307 überwacht. Container überwachen jedoch normalerweise ihre internen Ports. Im Fall von MySQL überwacht es Port 3306 innerhalb des Containers.
Lösung: Node.js-Konfiguration und DNS ändern
Um dieses Problem zu beheben, ändern Sie den Knoten .js-Konfiguration, um eine Verbindung zur Datenbank über Port 3306 herzustellen und den richtigen DNS anzugeben. In diesem Fall ist der DNS „mysql“, wie in docker-compose.yml definiert.
Dadurch wird die Node.js-Konfiguration wie folgt aktualisiert:
const config = { host: 'mysql', // Replace 'localhost' with the container DNS database: 'mydb', port: '3306', user: 'mysql', password: '1234', connectionLimit: 10 }
Ändern Sie außerdem die Befehl in der docker-compose.yml:
command: ["./wait-for-it.sh", "mysql:3306"] // Update the port number
Dadurch wird sichergestellt, dass das „wait-for-it.sh“-Skript darauf wartet, dass MySQL auf Port 3306 im Container lauscht.
Fazit
Durch das Verständnis des Port-Mapping-Mechanismus und die Aktualisierung der Node.js-Konfiguration und des DNS ist es möglich, den ECONNREFUSED-Fehler zu beheben und eine erfolgreiche Verbindung zwischen der Node.js-Anwendung und MySQL herzustellen Container in einer Docker-Umgebung.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich ECONNREFUSED, wenn ich von Node.js aus eine Verbindung zu einem MySQL-Docker-Container herstelle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!