728x90
목적 : 에러 해결 과정 기록
구현하고자 했던 내용
- Docker-compose를 이용해 서버와 MySQL 컨테이너를 실행시키기
Dockerfiledocker-compose.yaml version: '3.7' services: app: build: context: . dockerfile: Dockerfile ports: - 3000:3000 volumes: - ./:/app environment: MYSQL_HOST: mysql MYSQL_USER: root MYSQL_PASSWORD: password MYSQL_DB: workout mysql: image: mysql:8.0 restart: always environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: workout volumes: - mydata:/var/lib/mysql ports: - 3306:3306 volumes: mydata:
FROM node:14 WORKDIR /app/ COPY ./package.json /app/ COPY ./yarn.lock /app/ RUN yarn install COPY . /app/ CMD yarn start:dev
- Entity를 정의하고 정의된 Entity를 TypeORM을 통해 Docker 컨테이너에 MySQL에 mapping하기
app.module.ts import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { AppController } from './app.controller'; import { AppService } from './app.service'; @Module({ imports: [ TypeOrmModule.forRoot({ type: 'mysql', host: 'localhost', port: 3306, username: 'root', password: 'root', database: 'workout', entities: [__dirname + '/apis/**/*.entity.*'], synchronize: true, logging: true, }), ], controllers: [AppController], providers: [AppService], }) export class AppModule {}
에러 발생 과정
Docker-compose를 통해 서버와 데이터베이스는 문제없이 실행되었음
그런데 TypeORM을 통해 entity를 적용하던 과정에서 에러 발생
에러메시지
Error: connect ECONNREFUSED 0.0.0.0:3306
에러 원인
MySQL에 접근할 때 host: 'localhost'('127.0.0.1')로 접근했는데 node의 3306 포트가 MySQL의 3306 포트로 연결이 되지 않았으므로, localhost로 접근하지 않고, MySQL의 ip로 접근을 해야 한다.
Docker에 존재하는 MySQL ip 확인하는 명령어
docker inspect <container_id>
"IPAddress": "172.18.0.2" 라는 걸 찾아볼 수 있다.
최종 해결 코드
app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: '172.18.0.2',
port: 3306,
username: 'root',
password: 'password',
database: 'workout',
entities: [__dirname + '/apis/**/*.entity.*'],
synchronize: true,
logging: true,
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
반응형
'IT' 카테고리의 다른 글
Social login 중복되는 API 통합 (0) | 2023.03.25 |
---|---|
[기록하는 습관] TypeORM & Entity (0) | 2023.03.11 |
[공부 정리] Class & OOP & Design Pattern (0) | 2023.03.06 |
데이터 타입에 따른 저장 방식 (0) | 2023.03.03 |
2022년 회고(개발자가 되기로 결심) (0) | 2023.02.16 |