[트러블슈팅] 가상머신은 생각보다 빨리 디스크가 가득 찬다: Docker No space left on device 해결
최근 웹 보안을 공부하면서 별도의 실습 환경이 필요했습니다. 그래서 개인 노트북에 Oracle VM으로 가상머신을 생성하고, Docker로 필요한 프로그램들을 하나씩 설치하고 있었습니다.
MySQL도 필요한 프로그램 중 하나였습니다. 하지만 MySQL 컨테이너를 생성한 뒤 확인해보니 정상적으로 실행되지 않고 곧바로 종료되었습니다.

처음에는 MySQL 컨테이너 구성에 문제가 있다고 생각했습니다. 하지만 로그를 따라가며 원인을 확인해보니 실제 문제는 MySQL이 아니라 가상머신의 디스크 공간 부족이었습니다.
1. MySQL 컨테이너 생성과 비정상적인 종료
MySQL 컨테이너는 생성 직후 곧바로 종료되었습니다. 원인을 확인하기 위해 컨테이너 로그를 조회했습니다.
다음과 같은 메시지가 출력되었습니다.
permission denied while trying to connect to the docker API at unix:///var/run/docker.sock
현재 사용자에게 Docker 데몬에 접근할 권한이 없다는 의미였습니다. 사용자 계정을 Docker 그룹에 추가해 권한 문제만 해결하면 MySQL 컨테이너도 정상적으로 실행될 것으로 생각했습니다.
하지만 Docker 데몬 접근 권한을 해결한 뒤에도 컨테이너는 여전히 실행되지 않았습니다.
2. 실제 원인: No space left on device
다시 컨테이너 로그를 조회했습니다. 이번에는 다음과 같은 오류 메시지를 확인할 수 있었습니다.
mysqld: Error writing file '/var/lib/mysql/auto.cnf'
(OS errno 28 - No space left on device)
No space left on device는 디스크에 더 이상 데이터를 기록할 수 없다는 의미입니다. 이것이 MySQL 컨테이너가 종료된 실제 원인이었습니다.
MySQL은 초기화 과정에서 auto.cnf 파일을 생성해야 합니다. 그러나 디스크 공간이 부족해 파일 생성에 실패하면서 초기화를 완료하지 못했고, 결국 컨테이너가 종료되었습니다.
다음 명령으로 MySQL 데이터가 저장되는 디스크의 사용량을 확인했습니다.
$ df -h /home/sanghoon/mysql
Filesystem Size Used Avail Use%
/dev/sda1 12G 12G 0 100%
가상머신에 할당된 12GB의 디스크 공간이 모두 사용된 상태였으며, 사용할 수 있는 여유 공간은 전혀 남아 있지 않았습니다.
웹 보안 실습에 필요할 것이라고 생각해 여러 Docker 이미지를 미리 내려받았습니다. 하지만 실제로는 사용하지 않는 이미지도 많았고, 정리하지 않은 채 계속 쌓여 있었습니다. 결국 제한된 가상머신의 디스크 공간을 모두 사용하게 된 것입니다.
사용하지 않는 Docker 이미지를 삭제해 여유 공간을 확보한 뒤 다시 실행하자 MySQL 컨테이너도 정상적으로 시작되었습니다.
3. 가상머신의 디스크 관리가 필요한 이유
가상머신은 호스트 PC 위에서 실행되지만 사용할 수 있는 저장 공간은 별도로 제한됩니다.
호스트 PC로 사용하는 노트북에 수백 GB의 저장 공간이 남아 있더라도, 가상머신은 생성할 때 할당한 가상 디스크 용량 안에서만 데이터를 저장할 수 있습니다.
특히 개인 실습용 가상머신에는 비교적 적은 디스크 용량을 할당하는 경우가 많습니다.
처음 가상머신을 만들 때는 10GB나 20GB 정도면 충분해 보일 수 있습니다. 하지만 Docker를 이용해 여러 프로그램을 설치하다 보면 다음과 같은 데이터가 계속 쌓입니다.
- 내려받은 Docker 이미지
- 실행이 종료된 컨테이너
- 사용하지 않는 볼륨
- 이미지 빌드 과정에서 생성된 캐시
- 패키지 설치 파일과 애플리케이션 로그
호스트 PC에서는 몇 GB의 이미지가 추가되어도 크게 체감하지 못할 수 있습니다. 반면 가상머신에서는 이미지 몇 개만 내려받아도 디스크 사용률이 빠르게 증가할 수 있습니다.
그래서 가상머신에서는 사용하지 않는 리소스의 주기적인 정리가 필요합니다.
4. 마무리
가상머신은 독립된 실습 환경을 간편하게 구성할 수 있다는 장점이 있습니다. 하지만 CPU, 메모리, 디스크처럼 사용할 수 있는 자원이 제한되어 있다는 점도 함께 고려해야 합니다. 특히 Docker 이미지와 컨테이너는 생각보다 많은 디스크 공간을 차지할 수 있습니다.
이번 경험을 통해 호스트 PC에 저장 공간이 충분하더라도 가상머신의 디스크 공간까지 충분한 것은 아니라는 점을 배웠습니다.
가상머신은 처음 할당한 용량 안에서만 동작합니다. 따라서 Docker를 이용해 실습 환경을 구성할 때는 필요한 이미지만 내려받고, 사용하지 않는 리소스를 주기적으로 정리하는 습관이 필요합니다.