Node.js が MySQL Docker コンテナに接続 ECONNREFused
P粉296080076
P粉296080076 2024-01-21 15:41:18
0
1
604

この質問を重複としてマークする前に、他の回答を読みましたが、問題は解決しなかったことにご注意ください。

2 つのサービスを含む Docker compose ファイルがあります:

リーリー

/web/Dockerfile:

リーリー

docker-compose up --build の後、サービスは開始されますが、mySQL の開始を待っている間に「wait-for-it.sh」スクリプトがタイムアウトします (そのため、一時的に使用しないでください) DB) 接続をテストするときは、MySQL が受信接続を受け入れる準備ができていることがコンソールに表示されるまで待ちます)

MySQL がホストから実行されている場合、Sequel Pro を使用してログインしてデータベースにクエリを実行し、

./mysql/migrations からサンプル レコードを取得できます。


実行中の MySQL コンテナに SSH 接続して、同じ操作を実行することもできます。

ただし、私の Node.js アプリケーションは、接続時に

ECONNREFused 127.0.0.1:3307 を生成します。

MySQL の初期化:

リーリー

MySQL クエリ:

リーリー

URL がクリックされたときに呼び出されるルート /

リーリー

Node.js が失敗すると同時に、Sequel Pro または SSH を使用して実行中の Docker コンテナをクエリしてクエリできるため、これが競合状態である可能性は低いです。ということは、これは Node.js が MySQL コンテナにアクセスできないケースである可能性がありますか?

リーリー


P粉296080076
P粉296080076

全員に返信(1)
P粉399090746

###これ:### リーリー

は、Docker がホストの

3307

ポートをコンテナーの 3306 ポートにマップすることを意味します。これで、Sequel から localhost:3307 にアクセスできるようになります。 ただし、これはコンテナが

3307

をリッスンしていることを意味するものではなく、実際には、コンテナは引き続き 3306 をリッスンしています。他のコンテナが mysql DNS にアクセスしようとすると、内部コンテナ IP に変換されるため、3306 に接続する必要があります。 したがって、ノード構成は次のようになります:

リーリー

これは docker-compose.yml にあります:

リーリー

注:

wait-for-it.sh

スクリプトのソース: https://github.com/vishnubob/wait-for-it

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!