連接到MySQL Docker 容器:解決ECONNREFUSED
本文解決了嘗試從以下位置連接到MySQL Docker 容器時經常遇到的ECONEFUSED錯誤: Node.js。
背景
在多容器Docker 化應用程式中,通常有一個資料庫容器(例如MySQL)並從其他容器連接到它(例如,Node.js Web 應用程式)。但是,此連線可能會失敗並出現 ECONNREFUSED 錯誤,表示 Node.js 應用程式無法存取資料庫。
了解問題
設定 Docker 容器時,連接埠對映至關重要。一個常見的誤解是連接埠對映(例如“3307:3306”)意味著容器正在偵聽連接埠 3307。但是,容器通常會偵聽其內部連接埠。對於 MySQL,它會偵聽容器內的連接埠 3306。
解決方案:修改Node.js 配置和DNS
要解決此問題,請修改Node .js 配置連接到連接埠3306 上的資料庫並指定正確的DNS。在本例中,DNS 為 'mysql',如 docker-compose.yml 所定義。
這將更新Node.js 配置,如下所示:
const config = { host: 'mysql', // Replace 'localhost' with the container DNS database: 'mydb', port: '3306', user: 'mysql', password: '1234', connectionLimit: 10 }
此外,修改docker-compose.yml 中的命令:
command: ["./wait-for-it.sh", "mysql:3306"] // Update the port number
這可確保「wait-for-it.sh」腳本等待MySQL 偵聽容器內的連接埠3306。
結論
透過了解連接埠對映機制並更新Node.js 配置和DNS,可以解決ECONNREFUSED 錯誤並在Node.js 應用程式和MySQL 之間建立成功的連線Docker 化環境中的容器。
以上是為什麼從 Node.js 連接到 MySQL Docker 容器時會出現 ECONNREFUSED?的詳細內容。更多資訊請關注PHP中文網其他相關文章!