【问题标题】:Connecting database (MongoDB) and backend (nodejs) running in docker containers [duplicate]连接在 docker 容器中运行的数据库(MongoDB)和后端(nodejs)[重复]
【发布时间】:2021-02-06 11:06:42
【问题描述】:

首先,我查看了几个类似问题的讨论,但仍然没有工作。

我有一个 mongodb docker 容器正在运行,我使用 -p 命令进行了端口转发 确切地说,这是我运行的命令:

sudo docker run -t -d -p 27017:27017 --name mongo mongo-0000

docker ps 显示容器正在运行

9d9040a7bd66   mongo-0000   "docker-entrypoint.s…"   4 minutes ago   Up 4 minutes   0.0.0.0:27017->27017/tcp   mongo

在另一个线程中建议将 mongodb bindip 从 127.0.0.1 更改为 0.0.0.0 ,我也这样做了(我尝试了两种方式)。

然后我正在尝试使用 nodejs express 后端应用程序启动一个后端应用程序容器,我已经让它们在 VM 上正常工作,而不是在 docker jet 上。

我得到以下错误

    sudo docker run conduit-backend
Listening on port 3000

/ConduitReactApp/src/node_modules/mongodb/lib/server.js:261
        process.nextTick(function() { throw err; })
                                      ^
Error [MongoError]: failed to connect to server [localhost:27017] on first connect
    at Pool.<anonymous> (/ConduitReactApp/src/node_modules/mongodb-core/lib/topologies/server.js:313:35)
    at Pool.emit (node:events:378:20)
    at Connection.<anonymous> (/ConduitReactApp/src/node_modules/mongodb-core/lib/connection/pool.js:260:12)
    at Object.onceWrapper (node:events:485:26)
    at Connection.emit (node:events:378:20)
    at Socket.<anonymous> (/ConduitReactApp/src/node_modules/mongodb-core/lib/connection/connection.js:162:49)
    at Object.onceWrapper (node:events:485:26)
    at Socket.emit (node:events:378:20)
    at emitErrorNT (node:internal/streams/destroy:188:8)
    at emitErrorCloseNT (node:internal/streams/destroy:153:3)
    at processTicksAndRejections (node:internal/process/task_queues:81:21)
Emitted 'error' event on NativeConnection instance at:
    at /ConduitReactApp/src/node_modules/mongoose/lib/connection.js:288:17
    at NativeConnection.Connection.error (/ConduitReactApp/src/node_modules/mongoose/lib/connection.js:489:12)
    at /ConduitReactApp/src/node_modules/mongoose/lib/connection.js:520:15
    at /ConduitReactApp/src/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js:69:21
    at /ConduitReactApp/src/node_modules/mongodb/lib/db.js:229:14
    at Server.<anonymous> (/ConduitReactApp/src/node_modules/mongodb/lib/server.js:259:9)
    at Object.onceWrapper (node:events:485:26)
    at Server.emit (node:events:378:20)
    at Pool.<anonymous> (/ConduitReactApp/src/node_modules/mongodb-core/lib/topologies/server.js:313:21)
    at Pool.emit (node:events:378:20)
    [... lines matching original stack trace ...]
    at Socket.emit (node:events:378:20)

此外,在 app.js(在后端应用程序中)用于连接到 mongoDB 时,它是这样读取的

if(isProduction){
  mongoose.connect(process.env.MONGODB_URI);
} else {
  mongoose.connect('mongodb://localhost/conduit');
  mongoose.set('debug', true);
}

这里还有什么问题?

【问题讨论】:

    标签: node.js mongodb docker


    【解决方案1】:

    首先,您应该运行您的 mongodb 映像,然后您应该在运行您的应用容器时将 mongo 容器挂载到应用容器。例如,

    docker run -p xxxx:xxxx --link mongo:mongo <image-name>
    

    要像这样连接mongodb,你应该使用如下的连接字符串,

    'mongodb://mongo:27017/<db-name>'
    

    【讨论】:

      猜你喜欢
      • 2021-01-09
      • 2022-01-14
      • 2019-07-26
      • 2016-10-05
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多