无法连接到数据库 NestJs - Docker

Unable to connect to the database, NestJs - Docker

提问人:Carlos 提问时间:11/7/2023 最后编辑:Carlos 更新时间:11/7/2023 访问量:28

问:

[Nest] 29  - 11/07/2023, 3:40:56 PM     LOG [NestFactory] Starting Nest application...
[Nest] 29  - 11/07/2023, 3:40:56 PM     LOG [InstanceLoader] AppModule dependencies initialized +59ms
ependencies initialized +0ms
[Nest] 29  - 11/07/2023, 3:40:56 PM     LOG [InstanceLoader] JwtModule dependencies initialized +1ms
[Nest] 29  - 11/07/2023, 3:40:56 PM   ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1)...
Error: connect ECONNREFUSED 127.0.0.1:3307
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1555:16)
[Nest] 29  - 11/07/2023, 3:40:59 PM   ERROR [TypeOrmModule] Unable to connect to the database. Retrying (2)...
Error: connect ECONNREFUSED 127.0.0.1:3307

嗨,我的dockerfile中的连接仍然有问题,当我执行命令docker run -p80:3000 dmic:v1时,出现了与数据库的连接问题

这是我的dockerFile

FROM node:18-alpine

WORKDIR /app

COPY package.json .

RUN npm install

COPY . . 

RUN npm run build

EXPOSE 3000

CMD [ "npm", "run", "start" ]

Docker-Compose.yml

version: "3.8"
services:
  db:
    image: mysql:8.0
    container_name: mysql_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: pruebita_nest
      MYSQL_USER: user_dmic
      MYSQL_PASSWORD: root
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - "3307:3306"

这是我的环境变量

PORT = 3000
MYSQL_HOST = "localhost"
MYSQL_PORT = 3307
MYSQL_USERNAME = "user_dmic"
MYSQL_PASSWORD = "root"
MYSQL_DATABASE = "pruebita_nest"
MYSQL_SSL = "false"
JWT_SECRET = "no usar esto en produccion"

以及我与 TypeORM 的联系

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
    }),
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: process.env.MYSQL_HOST,
      port: parseInt(process.env.MYSQL_PORT,10),
      username: process.env.MYSQL_USERNAME,
      password: process.env.MYSQL_PASSWORD,
      database: process.env.MYSQL_DATABASE,
      entities: ['dist/**/*.entity.{ts,js}'],
      synchronize: true,
      ssl: process.env.MYSQL_SSL === 'true',
      extra: {
        ssl:
          process.env.MYSQL_SSL === 'true' 
            ? {
              rejectUnathorized : false
            } : null,
      },
     }),
    UsersModule,
    AuthModule,
    CatalogoModule
  ],
  controllers: [],
  providers: [],
})
docker nestjs typeorm

评论

0赞 Jay McDoniel 11/7/2023
所以你正在运行你的 nest docker 容器,并且你正在运行 docker-compose?为什么不同时运行它们,以便它们位于同一网络上?在 nest docker 容器中,localhost () 与计算机的 localhost 不匹配,因此您需要设置某种网络分辨率才能了解如何将调用路由到数据库docker-compose127.0.0.1

答: 暂无答案