본문 바로가기

공부기록/Backend

[docker] 백엔드 docker-compose 파일 build 에러 디버깅해보기 1

  • 하고자 하는 것 : docker container로 각각 mysql과 node를 생성해서 서로 연결하기
  • 백엔드 초기세팅 : 의문점 1. 백엔드 서버와 mysql 연동은 정상적으로 작동 중인가?
  • mysql과 node 컨테이너 : 의문점 2. mysql과 node 컨테이너는 각각 정상 작동 하는가?
  • 1. node : 컨테이너 빌드 에러없음
  • [문제점 1] node 컨테이너에서 mysql 컨테이너에 접속할 수 없음 
  • 2. mysql : 컨테이너 접속 에러 없음 
  • [문제점 2] docker-compose 파일을 활용해 build를 하면 에러가 뜸 (다음 포스팅)

 

백엔드 초기세팅

의문점 1. 백엔드 서버와 mysql 연동은 정상적으로 작동 중인가?


 

1. node로 실행하면 정상 실행 완료

2. express server로 5001포트 수신중

3. /api/user로 get요청을 받으면 mysql에서 id가 jenner인 유저의 정보를 받아서 return 해줌

 

 

위의 상황으로 미루어보아 

 

의문점 1에 대한 답은 Yes.

 

 

 

mysql과 node 컨테이너

의문점 2. mysql과 node 컨테이너는 각각 정상 작동 하는가?


 

 

1. node

 

node Dockerfile 이용하여 docker container 생성 

docker build -f Dockerfile -t test . 

 

 

node docker container 시작

docker run -d -p test

 

 

 

 

 

[문제점 1]

에러가 났는데, 이건 node자체의 에러가 아니다. 

이건 local mysql에 연결한 db가 아니라서 생긴 에러다 

local mysql에서 연결한 db는 문제없이 작동함

 

더보기
Error connecting to database ConnectionRefusedError [SequelizeConnectionRefusedError]: connect ECONNREFUSED 127.0.0.1:3306
2024-02-13 01:36:31     at ConnectionManager.connect (/app/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:92:17)
2024-02-13 01:36:31     at processTicksAndRejections (node:internal/process/task_queues:96:5)
2024-02-13 01:36:31     at async ConnectionManager._connect (/app/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:222:24)
2024-02-13 01:36:31     at async /app/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:174:32
2024-02-13 01:36:31     at async ConnectionManager.getConnection (/app/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:197:7)
2024-02-13 01:36:31     at async /app/node_modules/sequelize/lib/sequelize.js:305:26
2024-02-13 01:36:31     at async Sequelize.authenticate (/app/node_modules/sequelize/lib/sequelize.js:457:5) {
2024-02-13 01:36:31   parent: Error: connect ECONNREFUSED 127.0.0.1:3306
2024-02-13 01:36:31       at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1195:16) {
2024-02-13 01:36:31     errno: -111,
2024-02-13 01:36:31     code: 'ECONNREFUSED',
2024-02-13 01:36:31     syscall: 'connect',
2024-02-13 01:36:31     address: '127.0.0.1',
2024-02-13 01:36:31     port: 3306,
2024-02-13 01:36:31     fatal: true
2024-02-13 01:36:31   },
2024-02-13 01:36:31   original: Error: connect ECONNREFUSED 127.0.0.1:3306
2024-02-13 01:36:31       at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1195:16) {
2024-02-13 01:36:31     errno: -111,
2024-02-13 01:36:31     code: 'ECONNREFUSED',
2024-02-13 01:36:31     syscall: 'connect',
2024-02-13 01:36:31     address: '127.0.0.1',
2024-02-13 01:36:31     port: 3306,
2024-02-13 01:36:31     fatal: true
2024-02-13 01:36:31   }
2024-02-13 01:36:31 }

 

 

 

docker compose 파일에서 network로 컨테이너간 서로 연동을 해야 해결될 것같다 

각각 docker file을 활용하거나 image를 활용해 build와 run을 하는 것은 두개가 연동되어 정상 작동을 보지는 못한다. 

 

 

 

2. mysql : 컨테이너는 정상작동한다

 

mysql docker container 생성 및 시작 

docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=[비밀번호] -d -p 3306:3306 mysql:latest

 

 여기서는 docker file을 사용하지 않고 

미리 docker에서 다운받은 mysql 이미지를 활용하여 

새로운 컨테이너를 생성하고 실행함.

 

--name mysql-container 이름은 mysql-container

-e MYSQL_ROOT_PASSWORD=[비밀번호] 환경변수 MYSQL_ROOT_PASSWORD는 뒤에 입력 비밀번호 

-d 백그라운드모드 

-p 뒤의 포트번호 (호스트) : (컨테이너)

 

 

정상적으로 접속되었으며, 

docker container 터미널에 직접 접속해 

db list 확인  완료

 

docker exec -it [컨테이너네임] bash
mysql -u root -p
패스워드 입력 
SHOW DATABASES;

 

 

위의 상황을 짐작해봤을때 각각의 컨테이너는 잘 만들어 졌다

 

이젠 docker compose 파일을 보며 문제가 되는 부분을 살펴보아야 겠다. 

 

 

관련 글 : 

 

 

[docker] 백엔드 docker-compose 파일 build 에러 디버깅해보기 2

 

 

[docker] 백엔드 docker-compose 파일 build 에러 디버깅해보기 2

에러상황 구현하고자 했던 것 성공적으로 완료하면 디버깅 방법 1. 문제 1. env파일에 작성한 환경변수 잘 불러와지는가? 문제 2. docker-compose up했을 때 build가 되지 않음 문제 3. 각각의 옵션을 잘

wha-haha.tistory.com

 

 

[docker] 백엔드 docker-compose 파일 build 에러 디버깅해보기 3 (Error connecting to database ConnectionRefuseError 에러) - 해결완료!!!

 

 

[docker] 백엔드 docker-compose 파일 build 에러 디버깅해보기 3 (Error connecting to database ConnectionRefuseError

1. 에러상황 : Error connecting to database ConnectionRefuseError 2. 시도해본 것들 3. 에러 해결 성공! 1. 에러상황 : 2. 시도해본 것들 1) docker container mysql의 port 변경해보기 로컬 mysql과 충돌될 수 있으므로 host

wha-haha.tistory.com