web-dev-qa-db-ja.com

DockerでのMongoDBの「最初の接続でサーバー[localhost:27017]への接続に失敗しました」

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]'}

6
itsMe

デフォルトでは、 Compose はアプリに単一のネットワークを設定します。サービスの各コンテナはデフォルトのネットワークに参加し、そのネットワーク上の他のコンテナから到達可能であり、コンテナ名と同じホスト名でそれらのコンテナによって検出可能です。

docker-compose.yamlファイルによると、ホストマシンからのみ127.0.0.1:27017のmongoコンテナにアクセスできます。 NodeJSバックエンドコンテナからアクセスするには、db:27017を使用する必要があります。

5
Nickolay

これを変える

mongoose.connect('mongodb://localhost:27017/dbName', { useNewUrlParser: true });

これに

mongoose.connect('mongodb://db:27017/dbName', { useNewUrlParser: true }); // docker-compose service name

127.0.0.1localhostまたはmongoose.connectをdocker-composeサービス名に変更します。

0
Marcelo Fonseca