如何正确连接mongo副本集容器和nodejs应用程序容器?

s5a0g9ez  于 2022-11-03  发布在  Node.js
关注(0)|答案(1)|浏览(159)

我正在尝试将我的node.js应用程序与MongoDB容器连接。我试着在谷歌上搜索,我认为我做的一切都是正确的。问题是,当我从localhost启动我的应用程序时,使用npm run start和mongo连接字符串mongodb://localhost:27017/databaseDev?authSource=admin,一切都工作得很好。问题是,来自docker compose的同一个容器化应用程序无法连接mongo与mongodb://mongo:27017/databaseDev?authSource=admin。我使用的Docker构图是

version: '3.5'

services:
  mongo:
    container_name: mongo
    image: mongo:4.4.15
    volumes:
      - ./mongodb/data:/data/db
      - ./mongodb/init-mongo.sh:/docker-entrypoint-initdb.d/init-mongo.sh
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_DATABASE: 'databaseDev'
    command: ["--replSet", "rs0", "--bind_ip_all"]

  api:
    container_name: api
    build:
      context: ./
      dockerfile: Dockerfile
    volumes:
      - ./:/var/app
      - /var/app/node_modules
    ports:
      - 3010:3010
    environment:
      PORT: 3010
      NODE_ENV: 'development'
      DB_HOST: 'mongo'
      DB_PORT: 27017
      DB_NAME: 'databaseDev'
depends_on:
      - mongo
    command: ['node', 'dist/main']

init-mongo.sh 档案:

mongo -- "$MONGO_INITDB_DATABASE" <<EOF
    rs.initiate();
    rs.status();
EOF

和停靠文件

FROM node:16.15.1 as build
WORKDIR /var/app
COPY . .
RUN npm ci
CMD ["node", "dist/main"]

你知道这里有什么问题吗?

kdfy810k

kdfy810k1#

您正在连接到一个副本集,但没有在连接URI中指定它。
首先,您应该将&replicaSet=rs0添加到连接URI中。
我不是Docker中的专业人员,但据我所知,您正在暴露您的Docker容器中的端口3010,但试图连接到27017。

相关问题