1. 개요
해당 포스팅의 제목이 Tripot 프로젝트를 진행하면서 발생한 오류의 원인이 되었다. 이번에는 두 명령어 간의 차이를 알아보고, 해당 실수가 어떤 결과를 초래하였는지 정리해보자.
2. docker compose vs docker-compose
본론으로 들어가서 두 명령어가 어떤 차이점이 있는 지 정리해보자. 처음 이를 학습할 때는 둘 중 어떤 명령어를 사용해도 up 명령어가 정상적으로 동작하기에 차이가 없다 생각하고 넘겼었다. 하지만 다음과 같은 차이점이 존재한다.
Compose V2 | Compose V1 | |
명령어 | docker compose | docker-compose |
개발 언어 | python | go |
word separator | -(hyphen) | _(underscore) |
scale 옵션 | docker compose up --scale | docker-compose scale |
rm -all | (deprecated) | docker-compose rm --all |
이외에도 Compose V2는 환경 변수를 읽어들이는 법이 좀 더 일관성있게 변경되었다.
3. 발생했던 문제
무중단 배포를 구축하던 중이었다. 스크립트를 모두 작성하고 실행하는 데, 운영 컨테이너에서 mysql과 연결이 안되는 문제가 발생했다.
access denied for user 'root'@'localhost' (password:yes)
처음에는 이를 환경 변수 등에 문제가 있다 생각하여 모두 확인을 해봤다. 그러다 느낀 이상한 점은 개발 서버는 비슷한 조건에서 잘 돌아가는데 운영 서버만 문제가 생겼다는 것이다. 이를 해결하기 위해 두 서버간에 어떤 차이가 있는지 compose 파일도 바꿔보고, mysql에 계정도 생성해봤는데 문제는 따로 있었다.
다음은 docker-compose-common.yml을 실행시키기 위한 명령어이다.
docker compose -f docker-compose-common.yml --env-file ./dev.env up -d
그리고 스크립트에 작성했던 운영 서버 실행 명령어는 다음과 같다.
docker-compose -f docker-compose-prod.yml --env-file ./prod.env up -d
이처럼 Compose V1과 Compose V2를 혼용하면 전혀 다른데서 오류를 발생시켜 이를 해결하는 데 예상보다 더 오래 걸릴 수 있다.
절대 Compose V2와 V1을 혼용하지 말자
언젠가 필자와 같은 실수로 고생할 사람이 나올 수도 있기에 이 포스팅을 남긴다.
'Proj > Tripot' 카테고리의 다른 글
소셜 로그인 - 애플 identity_token에서 사용자 정보 가져오기 (0) | 2025.02.14 |
---|---|
Trouble Shooting - Spring Security 프로젝트에 비로그인으로 접속 시 (0) | 2025.02.11 |
스프링부트 테스트코드 작성하기: 통합 테스트 (1) | 2025.01.10 |
신고 기능 구현 (0) | 2025.01.04 |
로그인 인증 과정 추가해보기 - AuthenticationProvider 커스텀 (2) | 2024.11.30 |