https://medium.com/@ganiilhamirsyadi/dockerize-react-native-expo-app-152c1e65e76c
https://stackoverflow.com/questions/38380462/syntaxerror-unexpected-token-o-in-json-at-position-1
back & DB 연결 오류 등 😭
해결법 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"]
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;
로 해결.
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번 방법이 보안상 별로 좋지 못하다고 한다.