jinho-yoo-jack / wanted-preonboarding-challenge-backend-16

원티드 프리온보딩 백엔드 챌린지 사전과제
59 stars 155 forks source link

Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure에러에 대해 질문드립니다. #1

Open dmswo opened 9 months ago

dmswo commented 9 months ago

docker-compose.yml의 volume부분을 local 환경에 맞게 수정 후, docker-compose up -d 명령어를 통해 mysql은 콘테이너로 실행되어있는 상태에서 spring boot를 동작 시켰는데 에러가 발생하고 있습니다. 도커를 통해 mysql을 실행하였을 때, 별도로 해줘야 하는 설정이 있을까요?? 그 동안 개발하면서 DB연결은 쉽게했었는데 도커를 처음 사용해봐서 그런지 잘 안되네요 ㅠㅠ 구글링에 나온것처럼 localhost를 127.0.0.1로 변경해기도 하였는데 안되서 질문드려보았습니다. image

컨테이너도 정상동작중입니다. image

[에러 내용] com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

jinho-yoo-jack commented 9 months ago

상태를 보니, 정상적으로 동작을 안하는 걸로 보여지네요?! STATUS를 보면 Exited로 되어 있는데, 혹시 컨테이너를 Down 해놓은 상태인걸까? MySQL 도커 컨테이너가 정상적으로 실행이 되어 있는 상태라면 아래 이미지와 유사해야 합니다! 스크린샷 2024-01-18 오후 11 38 12

jinho-yoo-jack commented 9 months ago

MySQL 컨테이너를 먼저 실행하고 Mysql Workbench 또는 DataGrip 또는 CLI를 통해서 MySQL에 접근이 되는지 또한 확인 부탁드립니다!

dmswo commented 9 months ago

아 컨테이너가 제대로 띄어진게 아니였군요.. 감사합니다!! 그래서 로그를 찾아보았는데 아래 이미지와 같이 나오네요. 뭔가 permission적힌거 보면 권한관련된것 같은데 docker안에 있는 mysql에 권한을 줄 수 있나요?? image

dmswo commented 9 months ago

volumes부분을 아래와 같이 수정하니까 container가 띄어졌네요! volumes A : B가 있는데 A경로에는 로컬경로를 적어주지않나요? 제 로컬에는 저런경로가 없는데 되서요. image

jinho-yoo-jack commented 9 months ago

@dmswo 아마도 /data 경로 앞에 점(.)을 찍어 주신 것 같아요! ./data의 의미는 현재 docker-compose-yml이 있는 위치를 말합니다! 즉, CLI의 현재 경로이죠. 그래서 아마도 인텔리제이 프로젝트 현재 경로에 data 디렉토리와 build 디렉토리가 생성되어 있을 것 같은데 확인이 가능하실까요? 참고 자료URL : https://titanic1997.tistory.com/3

jinho-yoo-jack commented 9 months ago

@dmswo 도커는 OS의 사용자 권한을 그대로 가져가서 사용합니다! 그래서 docker-compose.yml에 보시면 user라는 항목에서 컨테이너 내부에서 사용할 계정의 권한을 정의하고 있는 것입니다. 아래의 참고 자료 보시고 공부하시면 좋을 것 같아요! 참고 자료URL: https://sweethoneybee.tistory.com/28

jinho-yoo-jack commented 9 months ago

많이 어려울 수도 있지만...! 도커를 사용하지 않는 개발팀은.. 없습니다! 그리고 최근 트렌드는 과제1번처럼 사전과제를 내주는 것이 트렌드로 알고 있습니다. 열심하다 생각하시고 화이팅입니다! 금주 주말까지 하셨는데..! 안되면 제가 원격으로 붙어서 한번 같이 보시죠! @dmswo

dmswo commented 9 months ago

@jinho-yoo-jack 말씀해주신것처럼 data디렉토리와 build디렉토리가 생성되었습니다. 그럼 정상적으로 컨테이너가 띄어졌다고 생각하면 되겠군요!! 그런데 로컬경로를 저렇게 설정해도 상관은 없는건가요?? 보통 어떻게 설정하나 싶어서요

jinho-yoo-jack commented 9 months ago

@dmswo 상관은 없습니다. 다만, 해당 경로는 DB의 데이터를 컨테이너에 생성되는 경로가 아니라, 로컬 경로에 저장하기 위함이라서 로컬의 디스크 파티션이 어떻게 나뉘어 있냐에 따라서 달라질 것 같아요! 리눅스(or유닉스)의 경우, /data라는 디렉토리를 하나 생성하고 500GB-1TB 정도의 디스크를 마운트해서 해당하는 디렉토리로 설정합니다. 참고 자료URL : https://rondeveloper.tistory.com/92

roeniss commented 9 months ago

컨테이너도 정상동작중입니다.

Exited 라고 떠있으면 정상동작중이 아닌 상태입니다.

jinho-yoo-jack commented 9 months ago

@dmswo 해당 이슈는 Close해도 될까욤?!

dmswo commented 9 months ago

@jinho-yoo-jack 넵 종료해도됩니다!

jinho-yoo-jack commented 9 months ago

@seongchanhwang 참고하시면 좋을 것 같아요

seongchanhwang commented 9 months ago

감사합니다! 이해하는데 도움이 되었습니다