連接到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中文網其他相關文章!