NodegoバックエンドでmongoDBを使用しています。問題は、次のエラーが発生していることです
node:16)UnhandledPromiseRejectionWarning:MongoNetworkError:最初の接続でサーバー[localhost:27017]への接続に失敗しました[MongoNetworkError:connect ECONNREFUSED 127.0.0.1:27017]
これは私のdocker-composeです
version: '3.4'
services:
db:
image: mongo:latest
ports:
- '27017:27017'
rest-api-node:
build: .
ports:
- '5000:5000'
links:
- db
restart: on-failure
私もdepends_on
で試しましたが、動作していませんでした。
バックエンドでは、DBと通信するためのミドルウェアとしてマングースです。これは私のindex.js
の一部です
mongoose.Promise = global.Promise
mongoose.connect('mongodb://localhost/demo')
app.listen(port, () => console.log("live"))
約束も使用してみましたが、変更はありません。私を助けてください。前もって感謝します
完全なエラーログ
プールで。 (/app/node_modules/mongodb-core/lib/topologies/server.js:505:11)rest-api-node_1 | Pool.emit(events.js:180:13)でrest-api-node_1 |接続時。 (/app/node_modules/mongodb-core/lib/connection/pool.js:329:12)rest-api-node_1 | Object.onceWrapper(events.js:272:13)でrest-api-node_1 | Connection.emit(events.js:180:13)でrest-api-node_1 |ソケットで。 (/app/node_modules/mongodb-core/lib/connection/connection.js:245:50)rest-api-node_1 | Object.onceWrapper(events.js:272:13)でrest-api-node_1 | Socket.emit(events.js:180:13)でrest-api-node_1 | emitErrorNT(internal/streams/destroy.js:64:8)でrest-api-node_1 | process._tickCallback(internal/process/next_tick.js:178:19)でrest-api-node_1 |名前: 'MongoNetworkError'、rest-api-node_1 |
メッセージ: '最初の接続時にサーバー[localhost:27017]への接続に失敗しました[MongoNetworkError:connect ECONNREFUSED 127.0.0.1:27017]'}
デフォルトでは、 Compose はアプリに単一のネットワークを設定します。サービスの各コンテナはデフォルトのネットワークに参加し、そのネットワーク上の他のコンテナから到達可能であり、コンテナ名と同じホスト名でそれらのコンテナによって検出可能です。
docker-compose.yaml
ファイルによると、ホストマシンからのみ127.0.0.1:27017
のmongoコンテナにアクセスできます。 NodeJSバックエンドコンテナからアクセスするには、db:27017
を使用する必要があります。
これを変える
mongoose.connect('mongodb://localhost:27017/dbName', { useNewUrlParser: true });
これに
mongoose.connect('mongodb://db:27017/dbName', { useNewUrlParser: true }); // docker-compose service name
127.0.0.1
のlocalhost
またはmongoose.connect
をdocker-composeサービス名に変更します。