외주 작업을 하던 중 ec2에 프리즈마 마이그레이션을 하는데 에러를 발견했다.
에러를 수정하는데에 거의 6시간 넘게 고생해서 혹시 누군가에게 도움이 될까 하는 마음에 글을 남긴다.
이 전에 나는 한 번
sudo docker-compose up -d
를 실행한 상태였는데
sudo docker-compose config
로 컨피그를 확인했을때 내 env에 띄어쓰기가 포함돼있어서 아이디와 비밀번호에 띄어쓰기가 들어가 있어서 디비에 접근할 수가 없었다.
그래서 지금 비슷한 문제가 있다면 우선 env파일에 띄어쓰기가 포함돼있는지를 확인하고 수정하는 것이 좋다.
sudo docker-compose down
을 하고
sudo docker-compose up --build -d #이미지를 새로 빌드하여 컨테이너를 실행
다시 컨피그를 확인했는데 변경사항이 적용되어 정상적으로 동작할 줄 알았으나 여전히 db에 접근할 수 없었다.
일단 이 에러는 프리즈마 에러로 데이터베이스 url에 포함된 데이터베이스 인증정보가 틀렸을때 났던 에러다.
sudo docker-compose logs postgres # Docker Compose를 사용하여 실행된 postgres 컨테이너의 로그를 출력하는 명령어
이렇게 Role "user"(지정한 user명) does not exist 이런 메시지가 나타났다.
Role "user"(지정한 user명) does not exist 나 위의 프리즈마 에러로 계속 검색하던 중
비밀번호를 만들어야한다, POSTGUS이런 변수를 env에 추가해야한다, psql에서 create user를 해야한다 등 많은 답변을 발견했는데 내 에러 케이스에는 해당하지 않았고 찾은 방법은 간단했다.
https://www.doitdjango.com/board/qna/36/
https://stackoverflow.com/a/67265613/24519580
✨ 위 사이트들에서 확인할 수 있었는데 ✨
sudo docker-compose down -v
도커 컨테이너를 처음에 세팅할때 아이디, 비밀번호를 잘못 세팅하면 볼륨을 없애고 다시 생성하지 않는 이상 그 세팅이 유지된다는 것이었다.
이렇게 하고나니 두번째 줄의 Volume removed가 기존에 그냥 down만 했을때에는 없었는데 새로 생겼다.
그리고 다시 빌드해서 실행하니 정상적으로 마이그레이션이 동작했다.
도커를 처음 사용해보는 거였는데 잘 알지 못하고 써서 고생을 했던 것 같다. 반나절동안 간단한 해결방법이 있는 이슈로 고생했지만 그래도 많이 배운 좋은 경험이었다 : )