【发布时间】:2020-12-08 20:20:12
【问题描述】:
我在运行 MongoDB in docker 时遇到错误。当我运行我的 docker-composer 文件时。 node-app-setup 容器出现以下错误,我的 HTTP 服务器崩溃了。但是,我的 mongo-express 容器工作正常。另一方面。当我MongoDB atlas 时,错误消失了。我的应用 (node-app-setup) 运行良好。
我该如何解决这个问题?
来自 Docker 日志的错误消息:
> nodemon ./bin/www
[nodemon] 2.0.6
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node ./bin/www`
mongodb://db:27017/mydb?authSource=admin
Master 35 is running
test-app is listening on http://localhost:8089
connected mongoose
events.js:292
throw er; // Unhandled 'error' event
^
MongoError: The $changeStream stage is only supported on replica sets
at MessageStream.messageHandler (/usr/src/app/node_modules/mongodb/lib/cmap/connection.js:268:20)
at MessageStream.emit (events.js:315:20)
at processIncomingData (/usr/src/app/node_modules/mongodb/lib/cmap/message_stream.js:144:12)
at MessageStream._write (/usr/src/app/node_modules/mongodb/lib/cmap/message_stream.js:42:5)
at writeOrBuffer (_stream_writable.js:352:12)
at MessageStream.Writable.write (_stream_writable.js:303:10)
at Socket.ondata (_stream_readable.js:719:22)
at Socket.emit (events.js:315:20)
at addChunk (_stream_readable.js:309:12)
at readableAddChunk (_stream_readable.js:284:9)
at Socket.Readable.push (_stream_readable.js:223:10)
at TCP.onStreamRead (internal/stream_base_commons.js:188:23)
Emitted 'error' event on ChangeStream instance at:
at ChangeStream.<anonymous> (/usr/src/app/node_modules/mongoose/lib/cursor/ChangeStream.js:41:51)
at ChangeStream.emit (events.js:315:20)
at processError (/usr/src/app/node_modules/mongodb/lib/change_stream.js:571:38)
at ChangeStreamCursor.<anonymous> (/usr/src/app/node_modules/mongodb/lib/change_stream.js:435:5)
at ChangeStreamCursor.emit (events.js:315:20)
at /usr/src/app/node_modules/mongodb/lib/core/cursor.js:343:16
at /usr/src/app/node_modules/mongodb/lib/core/cursor.js:736:9
at /usr/src/app/node_modules/mongodb/lib/change_stream.js:329:9
at done (/usr/src/app/node_modules/mongodb/lib/core/cursor.js:458:7)
at /usr/src/app/node_modules/mongodb/lib/core/cursor.js:533:11
at executeCallback (/usr/src/app/node_modules/mongodb/lib/operations/execute_operation.js:70:5)
at callbackWithRetry (/usr/src/app/node_modules/mongodb/lib/operations/execute_operation.js:122:14)
at /usr/src/app/node_modules/mongodb/lib/operations/command_v2.js:88:9
at /usr/src/app/node_modules/mongodb/lib/cmap/connection_pool.js:348:13
at handleOperationResult (/usr/src/app/node_modules/mongodb/lib/core/sdam/server.js:558:5)
at MessageStream.messageHandler (/usr/src/app/node_modules/mongodb/lib/cmap/connection.js:268:11) {
ok: 0,
code: 40573,
codeName: 'Location40573'
}
[nodemon] app crashed - waiting for file changes before starting...
我的 Docker 编写代码:
version: '3.8'
networks:
my-network-nodeApp:
services:
db:
container_name: mongo
image: mongo:4.2.0
restart: always
ports:
- 27017:27017
# environment:
# - MONGO_INITDB_ROOT_USERNAME=root
# - MONGO_INITDB_ROOT_PASSWORD=example
networks:
- my-network-nodeApp
db-mangement:
container_name: mongo-express
image: mongo-express
restart: always
depends_on:
- db
ports:
- 8081:8081
environment:
# ME_CONFIG_MONGODB_ADMINUSERNAME: root
# ME_CONFIG_MONGODB_ADMINPASSWORD: example
ME_CONFIG_MONGODB_SERVER: db
networks:
- my-network-nodeApp
app:
build:
context: .
dockerfile: ./docker/node/Dockerfile.Dev
image: "node-app"
depends_on:
- db
- db-mangement
container_name: "node-app-setup"
restart: always
# command: npm start
ports:
- "8089:8089"
volumes:
- ./:/usr/src/app
# - /app/code/node_modules
networks:
- my-network-nodeApp
我的.env 变量:
MONGODB_HOST=mongodb://db:27017/mydb?authSource=admin
我的app.js数据库连接代码
const mongoose = require("mongoose");
console.log(process.env.MONGODB_HOST);
mongoose.connect(process.env.MONGODB_HOST, {
useNewUrlParser: true,
useFindAndModify: false,
useUnifiedTopology: true,
});
const db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", function () {
console.log("connected mongoose");
});
【问题讨论】:
-
您无需在问题标题中添加
!!! Help !!!。在这里提出问题,就表明您需要帮助。 -
谢谢@mkrieger1
-
按照错误消息的指示运行副本集。
-
@D.SM 你能给我一些资源吗?如何在 docker 中创建副本集?
-
这可能在您找到创建现有部署的说明的同一位置进行了描述。
标签: node.js mongodb docker mongoose docker-compose