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



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

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

和Dockerfile

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

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

您正在连接到一个副本集,而没有在连接URI中指定它。

首先,您应该将&replicaSet=rs0添加到您的连接URI中。

我不是Docker的专业人员,但据我所知,你在Docker容器中暴露了3010端口,但试图连接到27017。

最新更新