2017-06-02 8 views
1

私はローカルに稼働しているMySQLサーバを持っています。それはコンテナ内にありません。私のアプリはRDSを打つことになるので、そのルートに行く意味はありません。私のアプリはテストとしてRDSを問題なく打つことができました。しかし明らかに私は地元の開発のために地元のものを打ちたい。なぜ、ECONNREFUSEDをdockerノードアプリケーションからlocalhost MySQLに接続するのですか?

私の端末からは、mysql --user=root --password=password mydbを正常に実行できます。

タイムアウトエラーが発生しないため、コンテナからはping 127.0.0.1:3306と問題ありません。

また、コンソールを使用して、RDSからローカルに実行されているMySQLに値を更新した後、適切な情報を確実に渡しています。

+0

一般的にあなたが特定のポートを持つ 'ping'を使用していません「ping」はICMPパケットを使用するためです。 mysqlサーバが 'netstat -nlp'のようなものを使って目的のアドレスとポートでリッスンしていることを確認しましたか? – mscdex

+0

mysqlサーバがUNIXソケットでリッスンしている場合は、 'mysql'モジュールまたはmysql2モジュールの' socketPath'接続設定オプションを使用して、ノードの代わりに接続することができます。 – mscdex

+0

@mscdex netstatに関して、私のアプリが開いている接続を維持しようとしていない場合、3306がポップアップするのはなぜですか?確かにそこにはまだリストに載っていないし、私はそれが期待されるとは思わない。 –

答えて

2

ドッカーコンテナには独自のネットワークIPがあり、それ自体にはlocalhostが含まれています。

  1. ホストのMySQLはそのインタフェース(バインドADDRES =のmy.cnfにおける0.0.0.0)の全てに聴いている:だから、基本的に2つの事を確認する必要があります。 netstat -na|grep 3306で確認してください。

  2. あなたのコンテナに到達するホストipを取り出します。したがって、コンテナのIPアドレス:docker inspect container-idを確認し、IPアドレスを見つけ、最後の部分を.1に置き換えてください。これは、コンテナのネットワーク内のホストのIPである必要があります。私。 172.17.0.1(それは固定IPとみなすことができ、DEV環境のために、それは大丈夫です)、これは何が必要であることを

だから、最も可能性が高い:172.17.0.1:3306

+0

私のものは、17ではなく、18のサイコロでした。 –

関連する問題