gpt4 book ai didi

node.js - 使用docker-compose的 Mongoose 连接失败

转载 作者:行者123 更新时间:2023-12-02 21:18:25 25 4
gpt4 key购买 nike

我有一个使用Mongo数据库的Node Express服务器。

我正在尝试使用docker-compose为每个容器创建一个容器。

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

version: "2"
services:
server:
container_name: server
restart: always
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
container_name: db
image: mongo
volumes:
- /var/lib/mongodb:/data/db
ports:
- "27017:27017"

还有我的 Dockerfile:
FROM node:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app
RUN npm install
COPY . /usr/src/app
RUN npm run build-run
EXPOSE 3000

我在许多教程中都看到,当使用Docker创建Mongo容器时,应该使用 mongoose.connect更新连接字符串以使用Docker容器命名解析。

所以我根据 docker-compose文件更改了连接字符串:
private readonly CONNECTION_STRING: String = 'mongodb://db/search-people-db'

public connect(): void {
mongoose.connect(this.CONNECTION_STRING)

this._db.on('error', (err) => {
console.log(`mongoose server failed to start: ${err}`)
})

this._db.once('open', () => {
console.log(`mongoose server running using ${this.CONNECTION_STRING}`)
})
}'

但是,在运行 sudo docker-compose up时,我不断出现以下错误:

Mongoose服务器无法启动:MongoNetworkError:首次连接时无法连接到服务器[db:27017] [MongoNetworkError:getaddrinfo ENOTFOUND db db:27017]

我究竟做错了什么 ?提前致谢

最佳答案

MongoDB的容器启动,但是MongoDB本身需要更多时间启动。因此您的应用程序在完全启动之前将无法连接到它。

按照Docker文档的建议,您应该为应用程序设置一个等待时间,然后运行代码。
我建议让 Mongoose 在第一次无法连接时尝试重新连接,或者在无法连接时让应用程序崩溃。 Docker将再次运行您的容器。

关于node.js - 使用docker-compose的 Mongoose 连接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48773828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com