【发布时间】:2020-10-13 07:55:41
【问题描述】:
我正在尝试对使用 mongoose 连接到 MongoDB 的 Node.js 应用程序进行 dockerize。当连接 URL 为:mongodb://localhost:27017/deposit 时,只要我从 shell 运行node index.js,它就会成功。
如果我重新启动计算机,然后尝试使用命令 docker-compose up 运行 dockerized 项目(在 url 中使用 mongo 而不是 localhost),它将无法连接到 MongoDB。但是在我再次尝试相同的命令后,它就成功了。
所以我的问题是为什么节点在计算机重启后第一次尝试无法连接到 MongoDB?
附言。 Docker 在我尝试时正在运行
connection.js
const mongoose = require('mongoose');
const connection = "mongodb://mongo:27017/deposit";
const connectDb = () => {
mongoose.connect(connection, {useNewUrlParser: true, useUnifiedTopology: true}).then(res => console.log("Connected to DB"))
.catch(err => console.log('>> Failed to connect to MongoDB, retrying...'));
};
module.exports = connectDb;
Dockerfile
FROM node:latest
RUN mkdir -p /app
WORKDIR /app
#/usr/src/app
COPY package.json /app
RUN npm install
COPY . /app
EXPOSE 7500
# ENTRYPOINT ["node"]
CMD ["node", "src/index.js"]
docker-compose.yml
version: "3"
services:
deposit:
container_name: deposit
image: test/deposit
restart: always
build: .
network_mode: host
ports:
- "7500:7500"
depends_on:
- mongo
mongo:
container_name: mongo
image: mongo
volumes:
- /data:/data/db
network_mode: host
ports:
- '27017:27017'
【问题讨论】:
-
当您尝试从 js 应用程序连接时,mongo db 可能尚未准备好接受连接。我建议你实现一个重试连接机制。 More.
标签: node.js mongodb docker mongoose