Heim  >  Artikel  >  Datenbank  >  Warum erhalte ich ECONNREFUSED, wenn ich von meiner Node.js-Anwendung aus eine Verbindung zum MySQL-Container herstelle?

Warum erhalte ich ECONNREFUSED, wenn ich von meiner Node.js-Anwendung aus eine Verbindung zum MySQL-Container herstelle?

Barbara Streisand
Barbara StreisandOriginal
2024-11-12 01:43:02835Durchsuche

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

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn