You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:20:08