본문 바로가기

공부기록/Backend

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

 

 

1. 에러상황 : Error connecting to database ConnectionRefuseError 

2. 시도해본 것들 

3. 에러 해결 성공!

4.  작은 에러 docker-compose up 했을때 서버 유지되지 않는문제

 

 

1. 에러상황 : 


 

2. 시도해본 것들


 

 

1) docker container mysql의 port 변경해보기 

로컬 mysql과 충돌될 수 있으므로

host port를 3306에서 3307로 변경해본다.

 

sequelize를 사용하는 곳에도 똑같이 port를 3307로 변경해준다. 

 

2) docker container의 ip 확인하기

 

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [container id]

 

 

3) docker logs확인

 

 

 

4) container app에 접속해서 mysql로의 curl은 잘 된다. 

 

 

5) mysql container에 접속해서 모든 계정으로의 접근 권한을 추가해준다 

 

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'supersecretpassword';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

 

 

원래는 하면 안되는 옵션.. 신중히 결정해야함 

 

 

6) mysql에 외부 네트워크에서 접근할 수 있게 command옵션을 docker-compose에 추가해준다 

 

외부 네트워크에서 접속 허용하는 command BIND ADDRESS 옵션을 주면 

안될 수도 있다고 해서 아래와 같이 추가 

command: - --default-authentication-plugin=mysql_native_password --bind-address=0.0.0.0

 

 

 

 

에러 

DB가 자꾸 끊김. 

연결할 수 없다는 에러.

 

 

 

 

 

 

 

 

수정

command를 각각 나눔

 

수정전 

command: - --default-authentication-plugin=mysql_native_password --bind-address=0.0.0.0

 

 

수정후

 

command:
    - --default-authentication-plugin=mysql_native_password
    - --bind-address=0.0.0.0

 

 

8) root가 아닌 user를 따로 만들어주어 권한 설정을 해준다 

 

 

 

9) connect.js 파일 수정

 

 

1. 환경변수 못불러왔던 문제 수정 완료 (console.log로 잘 불러오는 것 확인)

import * as dotenv from "dotenv";
dotenv.config();

 

2. database 명 수정 

 

Sequellize 첫번째  인수를 docker-compose파일에 정의한 container_name으로 수정

 

const sequelize = new Sequelize(
  "mysql-container",
  "root",
  process.env.DOCKERMYSQL_PASSWORD,
  {
    dialect: "mysql",
    port: "3306",
    host: "mysql",
    define: {
      freezeTableName: true,
    },
  }
);

 

 

 

 

3. 성공!


Docker rise넣어보기 

https://odysseyj.tistory.com/m/46

 

[Docker] Docker(도커)+NodeJs(Sequelize)+Mysql 연동하기 / Docker-Compose 구성 및 Docker-Compose 순서 설정.

최근 학교 데이터베이스 과제를 진행하면서 간단한 연락처를 구성하는 웹페이지를 짜게 되었다. 나는 기술 스택을 NodeJS + Mysql 로 사용하고싶은데, 조교님이 기술 스택을 Python(flask) + Postgresql을

odysseyj.tistory.com

위에서 찾은 글에 의하면, 

docker-compose로 각각 빌드를했고

depends_on 옵션을 주어 app이 container가 완료될때까지 기다리더라도 

성공할 때까지 좀더 기다려야 한다는 글을 읽었고, 

 

docker rise 이미지를 가져와 한번 기다려서 실행해보기로 한다. 

 

결과는 성공적.

 

 

 

 

 

오 그런데 1초 성공하고 exited되었는데 이건 좀 더 알아봐야겠다!!!

 

Connection successfully가 얼마나 반가운지...흐흐흐

 

 

좀 기뻐하는 시간 

 

더보기
오예!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
나자신 잘했어!!!!!!! 포기하지 않은 나 칭찬해!!!!!!!!!!!!!!!!!!!!1

 

 


4.  작은 에러 docker-compose up 했을때 서버 유지되지 않는문제


 

exited with code 0는 정상 작동 후 종료되었다는 안내문구

더이상 유지할 코드가 없어서 종료된 것으로 보인다. 

 

 

하고자 한 것

백 서버를 유지하고자 함이었으므로

Dockerfile에서 진입시킨 docker-entrypoint에서 

npm start명령어를 입력하여 유지시킬 수 있었다. 

 

 

 

 

 

[docker] 백엔드 docker 디버깅해보기

백엔드 초기세팅 : 의문점 1. 백엔드 서버와 mysql 연동은 정상적으로 작동 중인가? mysql과 node 컨테이너 : 의문점 2. mysql과 node 컨테이너는 각각 정상 작동 하는가? 1. node : 에러없음 [문제점 1] node

wha-haha.tistory.com

 

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

에러상황 구현하고자 했던 것 성공적으로 완료하면 디버깅 방법 1. 의문점 1. env파일에 작성한 환경변수 잘 불러와지는가? 에러상황 : docker-compose 파일을 활용해 build를 하면 container를 생성하지

wha-haha.tistory.com