MongoServerSelectionError:getaddrinfo ENOTFOUND

Aur*_*ien 5 mongodb node.js docker

我在使用 docker 和 NodeJS 驱动程序连接到 mongodb 时遇到一些问题。

\n

这是我的 docker-compose.yml 文件:

\n
version: "3.3"\nservices:\n  mongodb:\n    image: mongo:4.0.20\n    ports:\n        - 27017:27017\n    command: mongod --replSet rs0\n    deploy:\n      replicas: 1\n      restart_policy:\n        condition: "on-failure"\n
Run Code Online (Sandbox Code Playgroud)\n

我启动我的服务\ndocker stack deploy -c ./docker-compose.yml --with-registry-auth XXX

\n

然后,当我确定 mongo 启动良好时,我运行:

\n

docker exec $(docker ps -q -f name=mongodb) mongo local --eval "rs.initiate()"\n初始化复制集。

\n

这是我的nodejs测试文件:

\n
const MongoClient = require(\'mongodb\');\n\n(async () =>\xc2\xa0{\n  let db;\n  try {\n    db = (await MongoClient(\n      \'mongodb://localhost:27017/qos\',\n      {\n        useNewUrlParser: true,\n        useUnifiedTopology: true\n      }\n    )).db();\n    console.log(\'connected\');\n  } catch (error) {\n    console.trace(error)\n  }\n})()\n
Run Code Online (Sandbox Code Playgroud)\n

但是当我运行 test.js 文件时,我看到:

\n
Trace: MongoServerSelectionError: getaddrinfo ENOTFOUND 272b05abb632\n    at Timeout._onTimeout (node_modules/mongodb/lib/core/sdam/topology.js:438:30)\n    at listOnTimeout (internal/timers.js:554:17)\n    at processTimers (internal/timers.js:497:7) {\n  reason: TopologyDescription {\n    type: \'ReplicaSetNoPrimary\',\n    setName: \'rs0\',\n    maxSetVersion: 1,\n    maxElectionId: 7fffffff0000000000000001,\n    servers: Map { \'bcc9e46ea248:27017\' => [ServerDescription] },\n    stale: false,\n    compatible: true,\n    compatibilityError: null,\n    logicalSessionTimeoutMinutes: null,\n    heartbeatFrequencyMS: 10000,\n    localThresholdMS: 15,\n    commonWireVersion: 7\n  }\n}\n    at test.js:15:13\n
Run Code Online (Sandbox Code Playgroud)\n

我检查这272b05abb632是正确的容器 ID,\n并且在我的 docker 进程中我看到:

\n
2020-11-10T16:34:49.019360315Z XXX_mongodb.1.awsb46tji1lg@docker-desktop    | 2020-11-10T16:34:49.018+0000 I NETWORK  [listener] connection accepted from 10.0.0.2:49082 #4 (2 connections now open)\n2020-11-10T16:34:49.027564962Z XXX_mongodb.1.awsb46tji1lg@docker-desktop    | 2020-11-10T16:34:49.027+0000 I NETWORK  [conn4] received client metadata from 10.0.0.2:49082 conn4: { driver: { name: "nodejs", version: "3.6.3" }, os: { type: "Darwin", name: "darwin", architecture: "x64", version: "19.6.0" }, platform: "\'Node.js v12.19.0, LE (unified)" }\n2020-11-10T16:34:49.033185739Z XXX_mongodb.1.awsb46tji1lg@docker-desktop    | 2020-11-10T16:34:49.032+0000 I NETWORK  [conn4] end connection 10.0.0.2:49082 (1 connection now open)\n
Run Code Online (Sandbox Code Playgroud)\n

我不明白为什么 useUnifiedTopology 不起作用:(

\n

我请求你的帮助!

\n

我还尝试通过 docker-compose 在我的容器中添加 mongod.conf,但它也不起作用:

\n
version: "3.3"\nservices:\n  mongodb:\n    image: mongo:4.0.20\n    ports:\n        - 27017:27017\n    command: mongod --config /etc/mongod.conf \n    volumes:\n      - "./mongod.conf:/etc/mongod.conf"\n    deploy:\n      replicas: 1\n      restart_policy:\n        condition: "on-failure"\n
Run Code Online (Sandbox Code Playgroud)\n
security:\n  authorization: \'enabled\'\n\nnet:\n  port: 27017\n  bindIp: 0.0.0.0   #default value is 127.0.0.1\n\nreplication:\n  replSetName: rs0\n
Run Code Online (Sandbox Code Playgroud)\n