Docker部署Node.js应用遭遇SequelizeHostNotFoundError怎么解决?
Docker部署Node.js应用时Sequelize无法连接数据库的解决办法
错误原因
该错误是Node.js应用中的Sequelize无法解析名为db的数据库主机地址,本质是Docker容器间网络通信异常或数据库连接配置有误。
解决步骤
1. 检查Docker网络配置
- 确保Node.js应用容器与数据库容器处于同一Docker网络:
- 手动创建容器时,需显式指定加入同一网络:
# 创建专属网络(若未创建) docker network create app-network # 启动数据库容器并加入网络 docker run --name db --network app-network mysql:8 # 启动Node.js应用容器并加入同一网络 docker run --name classcube_enterprise_api --network app-network 你的Node镜像名 - 使用Docker Compose时,只需将两个服务放在同一配置文件中,默认会自动创建并加入专属网络,示例配置:
version: '3.8' services: db: image: mysql:8 # 数据库相关配置(如环境变量、端口映射等) api: build: . depends_on: - db # 应用相关配置
- 手动创建容器时,需显式指定加入同一网络:
2. 核对数据库连接配置
- 在Node.js应用的Sequelize配置中,数据库主机地址必须填写数据库容器的服务名/容器名(即
db),不能填localhost或127.0.0.1(容器内的localhost指向容器自身,而非宿主机),示例配置:const sequelize = new Sequelize('数据库名', '用户名', '密码', { host: 'db', // 此处必须为数据库容器的服务名或容器名 dialect: 'mysql' });
3. 确认数据库容器状态
- 检查数据库容器是否正常运行:
docker ps - 若容器未启动,执行启动命令:
docker start db
4. 验证容器间连通性
- 进入Node.js应用容器,尝试ping数据库容器的服务名,确认地址可解析:
docker exec -it classcube_enterprise_api ping db - 若ping不通,检查网络配置是否正确,或容器名/服务名是否拼写错误。
内容的提问来源于stack exchange,提问作者charles joseph owuala
相关产品推荐
相关产品推荐

