본문 바로가기
Server/Docker

[Docker] Unable to calculate image disk size 오류 해결

by 리요_ 2025. 5. 22.
반응형

[Docker] Unable to calculate image disk size 오류 해결

⭐ 오류 내역

[Docker] Unable to calculate image disk size 오류 해결

도커로 운영 중인 서버가 어느 순간부터 응답이 느려지더니 Unable to calculate image disk size 경고 문구와 함께 서버가 강제 종료되었습니다.


⭐ 오류 설명 : Docker on Window (WSL2) 환경에서의 디스크 공간 문제

Windows 환경에서 Docker Desktop을 사용하게 되면 대부분 WSL (Windows Subsystem for Linux) 2를 기반으로 동작하게됩니다.

WSL2Windows 안에 실제 Linux 커널과 환경을 가상으로 실행할 수 있도록 해주는 기술입니다.

Docker는 이 WSL2  환경 내부에 데이터를 저장하고 컨테이너를 실행합니다.

 

저의 경우 Docker로 운영 중이던 서버가 갑자기 응답이 느려지더니 결국 Unable to calculate image disk size라는 경고 문구와 함께 서버가 강제로 종료되는 문제가 발생했습니다.

Unable to calculate image disk size

이 오류 메시지는 Docker 가 WSL2 환경 내에서 사용하는 가상 디스크 이미지(.vhdx 파일)의 크기를 제대로 계산하지 못하거나 관련 공간에 문제가 생겼을 때 주로 발생합니다.

⭐ 해결 방법 

💫 1.  WSL2 환경 재시작 및 업데이트

WSL 환경 자체의 일시적인 문제나 불안정성으로 인해 흔하게 발생할 수 있습니다.

모든 오류의 기본..! 가장 먼저 시도해 볼 수 있는 기본적인 방법은 WSL 환경을 완전히 재시작하는 것입니다.

 

🔹1. 명령 프롬프트 또는 PowerShell을 관리자 권한으로 실행합니다.

[Docker] Unable to calculate image disk size 오류 해결

🔹2. 아래 명령어를 입력하여 현재 실행 중인 모든 WSL 인스턴스를 강제로 종료합니다.

wsl --shutdown

 

🔹3. Docker Desktop 애플리케이션을 다시 실행합니다.

Docker Desktop이 실행되면서 필요한 WSL 배포판이 자동으로 다시 시작됩니다.

 

재시작 만으로도 오류가 해결될 수 있습니다.

저의 경우는 재시작하여도 반복적으로 발생했기 때문에 이어서 진행하겠습니다.

 

🔹4. 아래 명령어를 입력하여 WSL 을 업데이트해줍니다. (WSL 종료 후 진행)

[Docker] Unable to calculate image disk size 오류 해결

디스크 공간이 부족하다는 추가적인 원인을 발견했습니다.

 

[Docker] Unable to calculate image disk size 오류 해결

 

남은 공간이 0 .... 서버가 죽을만했습니다. 디스크 정리를 해 주어야겠습니다.. 

💫 2.  불필요한 Docker 리소스 (이미지, 컨테이너, 캐시 등) 정리

1번 방법으로 문제가 해결되지 않았다면 WSL2 환경 내의 디스크 공간 부족이 원인일 가능성이 높습니다.

Docker를 사용하면서 이미지, 사용되지 않는 컨테이너, 빌드 캐시 등이 쌓여 예상치 못하게 많은 디스크 공간을 차지할 수 있습니다.

 

🔹1. Docker에서 사용하지 않는 리소스들을 정리하는 아래 명령어를 입력합니다.

[Docker] Unable to calculate image disk size 오류 해결

docker system prune

이 명령어는 중지된 컨테이너, 사용되지 않는 네트워크, 태그없는(dangling) 이미지, 사용되지 않는 빌드 캐시를 정리합니다.

🔹2. 불필요한 이미지를 확실하게 정리하기 위한 명령어 추가 실행

[Docker] Unable to calculate image disk size 오류 해결

1번 사용으로 3 GB의 공간을 확보했지만 택도 없습니다..

docker system prune -a

-a 옵션을 추가하여 사용되지 않는 모든 이미지와 빌드 캐시까지 삭제해 줍니다. 

사용 중인 컨테이너와 연결된 이미지는 삭제되지 않습니다.

[Docker] Unable to calculate image disk size 오류 해결

1GB가 안 되는 데이터가 정리되었습니다. 

 

총 디스크 용량인 400GB 중 실질적으로 프로젝트가 차지하는 용량은 100GB 로 300GB가 불필요하게 사용되고 있기 때문에 다음 방법을 시도해 줍니다.

💫 3.  WSL2 가상 디스크 파일 (.vhdx) 압축

1번과 2번 방법으로도 디스크 문제가 해결되지 않았을 때 추가로 시도해 볼 수 있는 방법입니다.

 

WSL2가상 디스크 파일(.vhdz)은 내부에서 파일이 삭제되어도 파일 크기가 자동으로 줄어들지 않습니다.

WSL 내부 공간을 확보했더라도 이 .vhdx 파일 자체의 크기는 그대로여서 Windows 드라이브 전체 공간이 부족한 상황이 발생할 수 있습니다.

 

.vhdx 파일은 WSL2 환경에서 사용하는 가상 하드 디스크 파일입니다.

리눅스 운영체제와 그 안에 설치된 모든 프로그램, 파일, Docker 에서 사용하는 이미지, 컨테이너, 볼륨 데이터 등이 모두 이 .vhdx 파일 안에 저장되어 있습니다.

 

이 파일이 없다면 WSL2 환경과 그 위에서 돌아가는 Docker 서비스를 사용할 수 없습니다.

 

Doskpart를 이용한 .vhdx 파일 압축은 .vhdx 파일 내에서 현재 실제로 사용되지 않는 빈 공간을 회수하여 파일 자체의 크기를 줄이는 과정입니다. 파일 안에 데이터를 건드리지 않고 불필요하게 커져있는 파일 크기를 줄이는 작업입니다.

 

🔹1. 모든 WSL 인스턴스를 종료합니다. (wsl --shutdown)

[Docker] Unable to calculate image disk size 오류 해결

 

🔹2. Windows 검색에서 diskpart를 검색하거나 명령 프롬프트에서 diskpart를 입력하려 Diskpart 유틸리티를 실행합니다.

[Docker] Unable to calculate image disk size 오류 해결

하단에 DISKPARK> .. 입력창이 뜨면 됩니다.

 

🔹3. WSL2 배포판의 .vhdx 파일 경로를 확인합니다.

일반적으로 C:\Users\{사용자이름}\AppData\Local\Packages\{WSL 배포판 이름}\LocalState\ext4.vhdx 경로에 있습니다.

[Docker] Unable to calculate image disk size 오류 해결

확인을 위해 해당 드라이브에서 AppData 경로로 들어가 줍니다.

AppData 폴더가 보이지 않는다면 상단 메뉴의 보기, 우측하단의 숨긴 항목 체크하여 접근합니다.

 

[Docker] Unable to calculate image disk size 오류 해결

저는 아래의 경로에서 ext4.vhdx 파일을 확인할 수 있었습니다.

C:\Users\Liyo\AppData\Local\Docker\wsl\data\ext4.vhdx

폴더 우클릭 속성을 통해 폴더 용량으로 추측하며 찾을 수 있습니다.

 

🔹4. Diskpart 창에서 아래 명령어를 순서대로 입력합니다.

> select vdisk file="<.vhdx 파일 경로>"
> attach vdisk readonly
> compact vdisk
> detch vdisk
> exit

[Docker] Unable to calculate image disk size 오류 해결

경로 입력 후 DiskPart 가 가상 디스크 파일을 연결했습니다. 메시지가 보이면 다음 명령어를 차례로 입력해 주면 됩니다.

[Docker] Unable to calculate image disk size 오류 해결

attach vdisk readonly 명령은 빨리 끝났지만, compact vdisk 명령은 10분 정도 소요됐습니다.

[Docker] Unable to calculate image disk size 오류 해결

가상 디스크 파일 분리 후 DiskPart를 종료합니다.

 

[Docker] Unable to calculate image disk size 오류 해결

12GB가량이 정리되면서 우선 서버가 종료되는 상황은 조치가 되었습니다.


⭐ 해결 과정 및 결과

"Unable to caclulate image dosk size" 오류로 인해 Docker 서버가 예기치 않게 종료되는 문제를 해결하기 위해 위에서 제시된 해결방법 1(WSL2 재시작), 2(불필요한 Docker 리소스 정리), 3(WSL2 가상 디스크 파일 압축)을 순차적으로 시도하였습니다.

 

다행히 12GB가량의 디스크 공간을 회수하면서 Docker 서버가 더 이상 강제 종료되지 않고 정상적으로 동작하는 것을 확인하였습니다.

 

비록 사용량에 비해 확보된 공간이 크지는 않았지만 서비스가 안정화되었다는 점에서 소기 목적을 달성할 수 있었습니다.


⭐ 발견된 추가 문제 및 향후 계획

오류 해결 과정에서 전체 디스크 공간 중 상당 부부인 300GB 이상이 여전히 알 수 없게 사용되고 있다는 점을 발견했습니다.

 

docker system df -v 명령 등을 통해 확인한 결과 Docker 이미지, 컨테이너 쓰기 가능한 레이어, 볼륨, 빌드 캐시 등이 실제 사용하는 공간은 예상보다 훨씬 적었습니다.

 

자세한 원인을 파악해 보니 운영하는 서비스 중 실시간 데이터를 처리하는 서비스 컨테이너 내부에 막대한 양의 로그 파일을 생성하고 있었으며 이 로그 데이터가 WLS2가상 디스크 파일(.vhdx) 내부에 누적되면서 파일 크기를 비대하게 만든 것으로 추정됩니다.

 

컨테이너 내부에 저장된 데이터는 Dockerprune 명령이나 .vhdx 파일 압축으로 회수할 수 없어 공간 부족 현상이 발생한 것으로 보입니다.

 

대용량 로그 누적으로 인한 디스크 공간 문제는 이번 게시글에서 다룬 "Unable to caclulate image disk size" 오류와 직접적인 해결 방법 범주를 벗어나기에 추후 고도화 작업을 진행할 계획입니다.

 

우선적으로 컨테이너를 삭제하고 관련 데이터를 정리하여 로그 누적 가설을 확인하고, 로그 파일이 컨테이너 내부에 쌓이지 않도록 애플리케이션 설정을 변경할 예정입니다.

 

장기적으로는 분산 추적 및 중앙화된 로깅시스템을 구축하여 로그 관리 효율성을 높이는 고도화 작업을 진행할 예정입니다.

 

2025.05.23 - [Server/Docker] - [Docker]비정상적인 디스크 사용량 원인과 해결 (.dockerignore 설정)

 

[Docker]비정상적인 디스크 사용량 원인과 해결 (.dockerignore 설정)

⭐ 비정상적인 디스크 사용량 원인 분석(이전 게시글에서 "Unable to caclulate image disk size" 오류 해결 과정에 대한 내용을 다루었다는 가정을 바탕으로 이어지는 내용입니다.) 2025.05.22 - [Server/Docker] -

li-yo.tistory.com

 


⭐ 참고 문서

https://github.com/docker/for-win/issues/13646

 

unable to calculate image disk size · Issue #13646 · docker/for-win

Description docker desktop starts in volumes tab is the circle spinning error: unable to calculate image disk size appears docker engine stops Reproduce start docker Expected behavior mount volumes...

github.com

 

https://forums.docker.com/t/unable-to-calculate-image-disk-size/133337

 

Unable to calculate image disk size

OS Version/build: Windows 11 Home 22H2 build 22621.963. App version: Docker Desktop 4.15.0 Each time I start Docker Desktop, the referenced message shows up in red at the top then it disappears. I don’t know if this is a serious problem but things seem t

forums.docker.com

 

 

 

 

반응형