과제전형 시 docker 컨테이너에서 실행 가능한 형태로 제출해야하는 경우가 있다.
docker를 사용해본 적도 없고 노트북 용량도 부족하여 꽤나 애먹었다 ..!
지난 포스트에서 Docker 설치 중 발생한 WSL 에러 해결법을 포스팅했다.
이번에는 Docker에서 MySQL 컨테이너를 띄우려 했을 때, 겪었던 실행 실패 문제를 정리한다.
1. 에러 메시지부터 본다
컨테이너가 바로 꺼지고, 로그에 아래 메시지가 출력된다면 ..?
mysqld failed while attempting to check config
command was: mysqld --verbose --help ...
이는 MySQL 컨테이너 내부에서 설정 확인 단계에서 실패한 것으로,
단순히 포트를 바꾸거나 재시작한다고 해결되지 않는다.
2. 포트 충돌 확인
로컬 PC에 이미 MySQL이 떠 있다면 3306 포트는 점유된 상태다.
이 경우 docker-compose에서 3307:3306으로 포트를 바꿔야 한다.
포트 점유 여부는 아래 명령어로 확인한다.
netstat -ano | findstr :3306
PID가 보이면 taskkill로 종료할 수 있다.
taskkill /PID [PID번호] /F
3. Docker 볼륨 정리
volumes:를 사용하지 않아도 Docker는 내부 볼륨을 만든다.
MySQL의 /var/lib/mysql이 꼬이면 컨테이너는 실행되지 않는다.
아래 명령어로 볼륨을 정리한다.
docker-compose down --volumes --remove-orphans
docker volume prune -f
4. WSL이 꼬였을 수도 있다
WSL을 사용하는 환경에서는 Docker의 backend가 WSL 위에 올라간다.
이게 꼬이면 아무리 컨테이너를 다시 띄워도 실패한다.
아래 명령어로 Docker WSL 환경을 초기화할 수 있다.
(주의: 모든 Docker 이미지, 설정이 초기화된다)
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
MySQL 컨테이너가 죽는 문제는 단순히 컨테이너 재시작으로는 해결되지 않는다.
에러 로그 → 포트 점유 → 볼륨 정리 → WSL 초기화 순으로 접근하면
이 문제는 해결할 수 있다.
이걸 해결하고 나니까 그 다음엔 도커 이미지 다운로드 시 에러가 발생....
다음주에는 이걸로 적어야지 ㅠ