[React Native+Node.js+MySQL] docker

또잉의 공부일지·2023년 8월 29일

참고 목록:

오류 해결 기록:

back & DB 연결 오류 등 😭

1. db가 connection 준비되기 전에 backend가 시도하고 종료됨

해결법 1) 백엔드에서 연결 실패 하면 2초 가량 기다린 후 다시 연결 계속 시도하도록
해결법 2) wait-for-it.sh를 이용해 db가 준비돼야만 backend에서 연결 시도하도록

1이 간단해보여서 1로 시도했는데 안돼서 2 방법으로 해결했다.

docker-compose.yml의 backend 단에 추가

command:
	- '/wait-for-it.sh database:3306 -- node index.js'

backend의 Dockerfile에 추가

ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh /wait-for-it.sh
RUN chmod +x /wait-for-it.sh

CMD ["sh", "-c", "./wait-for-it.sh database:3306 -- node index.js"]

2. Can't connect to local MySQL server 에러

Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38)

docker의 코드에 접근하여 해결.
docker compose up -build한 뒤
docker ps -a 하면 나오는 backend의 id를 이용.

docker exec -it 'backend id 따옴표 없이 넣기' bash

하면

이런식으로 docker container 안에 접근할 수 있게 된다.

여기서 위와 같이

mysql -u root -p

하여 mysql에 접근하여 비번 입력한 후 mysql>에 다음과 같은 과정:

USE 'database name';
테이블 등 생성
quit;

로 해결.

3. DB authentication 에러

Database connection error: Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

--> MySQL2 설치 후 backend의

const mysql = require('mysql');

const mysql = require('mysql2');

로 변경한 후

해결법 1)
백엔드의 createConnection 부분에서

insecureAuth: true,

추가

해결법 2)
docker-compose.yml의 database 부분에서

command:
	- default_authentication_plugin=mysql_native_password 

추가

해결법 1로 해결되지 않아 해결법 2를 진행한 뒤

백엔드 단에서 createConnection할 때 이용하는 유저 정보를 mysql에 접근 허용하기 위해

ALTER USER 'root'@'%' IDENTIFIED WITH 'mysql_native_password' BY '내 패스워드';
FLUSH PRIVILEGES;

로 해결.

1번 방법이 보안상 별로 좋지 못하다고 한다.

0개의 댓글