我有一台使用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]
我做错了什么?提前致谢
答案 0 :(得分:1)
MongoDB的容器启动但MongoDB本身需要更多时间启动。因此,在完全启动之前,您的应用程序将无法连接到它。
正如Docker的文档建议的那样,您应该为应用程序设置等待时间,然后运行代码。 我建议让mongoose尝试重新连接,如果第一次无法连接或让应用程序崩溃,如果它无法连接。 Docker将再次运行您的容器。
答案 1 :(得分:0)
将docker-compose.yml中的depends_on
替换为links
,然后尝试再次运行命令。