no space left on device 에러로 빌드가 멈추거나 컨테이너가 안 뜨면, 십중팔구 도커가 쌓아 둔 중단된 컨테이너, dangling 이미지, 빌드 캐시가 디스크를 채운 것입니다. docker system prune이 해결책이지만, 옵션 하나를 잘못 붙이면 DB 볼륨까지 날아갑니다. 무엇이 지워지는지 정확히 알고 써야 합니다.
먼저 무엇이 디스크를 먹는지 본다
지우기 전에 사용량부터 확인합니다.
로컬 터미널
docker system df # 이미지·컨테이너·볼륨·캐시별 사용량
docker system df -v # 항목별 상세 (어떤 이미지가 큰지)
RECLAIMABLE 열이 "지우면 회수 가능한 용량"입니다. 보통 Build Cache와 dangling 이미지가 가장 큽니다.
prune이 지우는 범위
| 명령 | 지우는 대상 | 위험도 |
|---|---|---|
docker container prune | 중단된 컨테이너 | 낮음 |
docker image prune | dangling 이미지(태그 없는 것) | 낮음 |
docker image prune -a | 사용 중이 아닌 모든 이미지 | 중간 |
docker builder prune | 빌드 캐시 | 낮음 |
docker system prune | 중단 컨테이너 + dangling 이미지 + 미사용 네트워크 + 빌드 캐시 | 중간 |
docker system prune -a --volumes | 위 전부 + 미사용 이미지 + 익명 볼륨 | 높음 |
핵심 경고는 --volumes입니다. 이 플래그를 붙이면 어떤 컨테이너에도 연결돼 있지 않은 볼륨이 삭제됩니다. 잠깐 멈춰 둔 DB 컨테이너의 데이터 볼륨이 "미사용"으로 잡혀 통째로 날아갈 수 있습니다.
안전한 정리 순서
위험이 낮은 것부터 좁혀 가는 방식을 권장합니다.
- 사용량 파악 —
docker system df로 어디가 큰지 본다 - 빌드 캐시부터 —
docker builder prune(가장 안전하고 효과 큼) - 중단 컨테이너·dangling 이미지 —
docker system prune(볼륨 옵션 없이) - 여전히 부족하면 —
docker image prune -a로 미사용 이미지 정리 - 볼륨은 마지막에, 개별 확인 후 —
docker volume ls로 목록을 직접 본 뒤 이름을 지정해 삭제
로컬 터미널
docker volume ls # 무엇이 있는지 먼저 확인
docker volume rm <volume-name> # 이름을 콕 집어 삭제 (일괄 prune 금지)
볼륨만큼은 절대 --volumes로 한 번에 날리지 말고, 이름을 직접 확인해 지우는 습관이 데이터를 지킵니다.
안전 체크리스트
로컬 터미널
# 1. 지금 살아 있는(중요) 컨테이너 확인 — 이게 멈춰 있으면 prune 위험
docker ps -a
# 2. 캐시·중단 컨테이너 정리 (볼륨 건드리지 않음)
docker builder prune
docker system prune
# 3. 회수량 다시 확인
docker system df
docker ps -a로 "지금 멈춰 있지만 지우면 안 되는" 컨테이너가 없는지 확인한 다음 prune을 돌리면 사고를 막을 수 있습니다.
prune이 무엇을 지우는지 직접 컨테이너·볼륨을 만들어 보며 확인하는 실습은 도커 트랙에서 회원가입 없이 무료로 해볼 수 있습니다.