我正在尝试将我的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"]
你知道这里有什么问题吗?
1条答案
按热度按时间kdfy810k1#
您正在连接到一个副本集,但没有在连接URI中指定它。
首先,您应该将
&replicaSet=rs0
添加到连接URI中。我不是Docker中的专业人员,但据我所知,您正在暴露您的Docker容器中的端口3010,但试图连接到27017。