首頁  >  文章  >  資料庫  >  當我從 Node.js 應用程式連接到 MySQL 容器時,為什麼會出現 ECONNREFUSED?

當我從 Node.js 應用程式連接到 MySQL 容器時,為什麼會出現 ECONNREFUSED?

Barbara Streisand
Barbara Streisand原創
2024-11-12 01:43:02836瀏覽

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

連接到MySQL Docker 容器時Node.js ECONNREFUSED

在涉及MySQL 容器和Node.js Web 服務的Docker compose 設定中,儘管已建立Docker 連結並正確配置資料庫,但從Node.js 連接到MySQL 仍導致ECONNREFUSED 錯誤

問題陳述

問題源自於對 Docker 連接埠對映的誤解。在 Docker compose 檔案中:

ports:
  - "3307:3306"

這將主機連接埠 3307 對應到容器連接埠 3306。雖然這允許從主機從外部存取 MySQL 容器的資料庫,但它不會更改容器的內部連接埠聆聽。

解決方案

要解決此問題, Node.js 配置和Docker 指令已調整:

Node.js 配置

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指令

command: ["./wait-for-it.sh", "mysql:3306"] // Wait for the MySQL container to start on port 3306

說明

透過使用將Docker 服務名稱(mysql) 作為Node.js 配置中的主機,我們確保嘗試連接到容器,而不是主機。此外,透過將 wait-for-it 腳本參數變更為 3306,我們等待 MySQL 在容器內的本機連接埠上準備就緒。

實作這些變更後,ECONNREFUSED 錯誤已解決,且Node.js 應用程式可以成功連接到 MySQL Docker 容器。

以上是當我從 Node.js 應用程式連接到 MySQL 容器時,為什麼會出現 ECONNREFUSED?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn