반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- SementicTags
- 비전공자개발자이야기
- 유연성
- TypeORM
- SementicWeb
- 심폐지구력
- 송도커낼워크
- 칼국수맛집
- 청라맛집
- K 디지털 크레딧
- 다이어트
- 서구맛집
- 인천맛집
- 바이러스
- 무궁화분식
- 근지구력
- 막창맛집
- 시맨틱태그
- 탄수화물
- 달리기
- 마라탕맛집
- 부평파스타맛집
- 아이들이 좋아하는
- 심박수
- 코로나19
- 근력
- 에너지원
- HTML
- 걷기
- 조깅
Archives
- Today
- Total
songin.dev님의 블로그
[Docker] Error: connect ECONNREFUSED 0.0.0.0:3306 본문
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 {}
반응형
Comments