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

NestJS应用中TypeOrmModule无法连接MySQL数据库求助

问题排查与解决方案

核心问题分析

你的数据库连接失败主要源于三个配置错误:

  1. MySQL容器端口映射错误,导致主机无法正确访问容器内的MySQL服务
  2. 目标数据库nest-events未预先创建,连接时无对应数据库可访问
  3. 若NestJS应用运行在Docker容器中,主机地址配置不符合Docker网络规则

具体修复步骤

1. 修正Docker Compose的MySQL端口映射

容器内的MySQL默认监听3306端口,你当前的映射将主机3306端口指向容器3307端口,属于无效映射。修改docker-compose.yml中MySQL服务的端口配置:

version: "3.8"

services:
  mysql:
    image: mysql:8.0.23
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: nest-events  # 新增:自动创建目标数据库
    ports:
      - "3306:3306"  # 修正为正确的端口映射

  postgres:
    image: postgres:13.1
    restart: always
    environment:
      POSTGRES_PASSWORD: example
    ports:
      - "5432:5432"
      
  adminer:
    image: adminer
    restart: always
    ports:
      - "8080:8080"

2. 调整NestJS连接配置

  • 若NestJS应用运行在主机(非Docker容器):保持主机地址为127.0.0.1,端口为3306即可,修正后的app.module.ts:
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { EventsController } from "@events/events.controller";
import { TypeOrmModule } from "@nestjs/typeorm";

@Module({
  imports: [TypeOrmModule.forRoot({
    type: 'mysql',
    host: '127.0.0.1',
    port: 3306,
    username: 'root',
    password: 'example',
    database: 'nest-events',
    autoLoadEntities: true,
    synchronize: true, // 仅开发环境使用,生产环境需关闭
  })],
  controllers: [AppController, EventsController],
  providers: [AppService],
})
export class AppModule {}
  • 若NestJS应用也运行在Docker容器中:将主机地址改为Docker服务名mysql(同一Docker网络内可通过服务名直接访问):
host: 'mysql', // 替换原有的127.0.0.1

验证操作

  1. 停止并重启Docker容器:
docker-compose down && docker-compose up -d
  1. 重启NestJS应用
  2. 检查应用日志,确认数据库连接成功

内容的提问来源于stack exchange,提问作者Ahmad Kol Agha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:50:22