MySQL Docker コンテナへの接続: ECONNREFUSED の解決
この記事では、MySQL Docker コンテナに接続しようとしたときに頻繁に発生する ECONNREFUSED エラーについて説明します。 Node.js.
Background
マルチコンテナの Dockerized アプリケーションでは、データベース コンテナ (MySQL など) があり、他のコンテナからそれに接続するのが一般的です。 (例: Node.js Web アプリケーション)。ただし、この接続は ECONNREFUSED エラーで失敗し、Node.js アプリケーションがデータベースに到達できないことを示す可能性があります。
問題について
Docker コンテナを構成するときは、ポートマッピングは非常に重要です。よくある誤解は、「3307:3306」などのポート マッピングは、コンテナーがポート 3307 でリッスンしていることを意味するということです。ただし、コンテナーは通常、内部ポートでリッスンします。 MySQL の場合、コンテナ内のポート 3306 でリッスンします。
解決策: Node.js 構成と DNS を変更する
この問題を解決するには、ノードを変更します。ポート 3306 でデータベースに接続し、正しい DNS を指定するための .js 構成。この場合、DNS は docker-compose.yml で定義されている「mysql」です。
これにより、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 中国語 Web サイトの他の関連記事を参照してください。