ホームページ > データベース > mysql チュートリアル > Node.js から MySQL Docker コンテナに接続すると ECONNREFused が発生するのはなぜですか?

Node.js から MySQL Docker コンテナに接続すると ECONNREFused が発生するのはなぜですか?

DDD
リリース: 2024-11-10 22:22:03
オリジナル
177 人が閲覧しました

Why Am I Getting ECONNREFUSED When Connecting to a MySQL Docker Container from Node.js?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート