
저는 홈어시스턴트 추가 기능을 개발하기 위해 VS Code devcontainer를 자주 실행합니다. 이 devcontainer는 Docker(내 호스트 Docker 내부)를 실행합니다. 몇 시간 작업한 후 호스트 Docker의 디스크 공간이 부족해 다양한 문제가 발생합니다. 여기서는 이 개발 컨테이너가 과도하다고 생각되는 52GB를 사용하고 있음을 보여줍니다.
% docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 1 1.333GB 0B (0%)
Containers 1 1 52.17GB 0B (0%)
Local Volumes 1 1 220.2MB 0B (0%)
Build Cache 0 0 0B 0B
dev 컨테이너 내부에서는 df
이러한 사용량의 대부분이 Docker VFS에서 발생함을 보여줍니다.
% docker exec 7f666319eddf du -hd 1 /var/lib/docker/
54G /var/lib/docker/vfs
448K /var/lib/docker/containerd
8.0K /var/lib/docker/tmp
20M /var/lib/docker/image
28K /var/lib/docker/volumes
4.0K /var/lib/docker/swarm
3.1M /var/lib/docker/containers
116K /var/lib/docker/buildkit
16K /var/lib/docker/plugins
4.0K /var/lib/docker/runtimes
88K /var/lib/docker/network
54G /var/lib/docker/
그러나 컨테이너 내부에서 docker는 해당 컨테이너가 1GB 미만을 사용하고 있다고 생각합니다.
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 21 19 2.829GB 714.7MB (25%)
Containers 100 8 628.7MB 605.8MB (96%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
하지만 실행 후에는 docker container prune
54GB가 28GB로 줄어듭니다. 그렇다면 이 사용법이 에 나타나지 않는 이유는 무엇입니까 docker system df
?
저는 macOS Sonoma에서 Docker Desktop 4.28.0을 실행하고 있습니다. Ventura에서도 같은 문제가 있습니다.
답변1
이는 /var/lib/docker
볼륨이 아닌 컨테이너 내부에 있을 때 자주 발생합니다. 컨테이너 파일 시스템은 오버레이인 경우가 많으며 오버레이 파일 시스템 내부에 오버레이 파일 시스템을 정의하는 것은 불가능합니다.
계층화된 파일 시스템 드라이버를 사용할 수 없는 경우 대체 방법은 각 계층에 대한 전체 파일 시스템의 복사본인 "네이티브" 또는 "vfs" 드라이버를 사용하는 것입니다. 따라서 100MB 이미지가 있고 도커 이미지에 단일 1MB 파일을 추가하면 이제 드라이브에 201MB의 저장 공간이 생기고, 원본 레이어에 100MB, 새 레이어에 101MB가 생깁니다. 또한 모든 컨테이너는 파일 시스템에 읽기/쓰기 레이어를 추가해야 하므로 생성된 모든 컨테이너에 대해 전체 이미지가 복사됩니다.
해결 방법은 볼륨을 마운트 /var/lib/docker
하고 해당 마운트의 소스가 다음과 같은지 확인하는 것입니다.지원되는 백업 파일 시스템계층화된 파일 시스템 드라이버 중 하나에 의해.