Docker "No space left on device" 오류 해결 방법(in MacOS)
Offensive Security Engineer, Developer and H4cker.
요즘 도커 이미지를 빌드할일이 아주 많은데, 갑자기 아래와 같은 에러가 발생했습니다.
failed to register layer: Error processing tar file(exit status 1): write /usr/local/arachni/system/gems/gems/ffi-1.9.18/lib/ffi_c.so: no space left on device
결국은 no space left on device 요게 핵심인 것 같은데요, PC 용량은 넉넉하지만 왜 공간이 없다고 하는지 의아했습니다.
구글링을 해본 결과 쓸만한 답안을 하나 구했습니다.
우선 저 에러는 MacOS에서만 나타는 에러이며 Docker에서 미리 할당된 용량이 이미 존재하는데, 이를 초과하는 경우 이 에러가 발생하게 됩니다. 관련 파일은 Docker.qcow2 파일이며 아래 경로에 있습니다.
- ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
저는 용량을 같이 체크해보니.. 64GB를 차지하고 있었죠. (한 60G 이상부터 발생하는 에러라고 하네요) Docker.qcow2 파일은 Docker 이미지를 정보를 가지고 있고 삭제 시 로컬에 저장된 모든 이미지가 날아갑니다. 전 기존에 빌드했던 이미지가 크게 중요하진 않아서 해당 파일을 제거해주었습니다.
rm -rf ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
Docker.qcow2 파일은 도커 재시동 시 다시 생성되기 때문에 지우셔도 크게 문제 없습니다
이런 일을 예방하기 위해선 주기적으로 불필요한 이미지에 대해서 정리가 필요합니다.
# 볼륨제거
echo "remote volumn"
docker volume rm $(docker volume ls -qf dangling=true)
# 이미지 제거
echo "remote docker images"
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
docker images -a | sed '1 d' | awk '{print $3}' | xargs -L1 docker rmi -f
제가 관련해서는 이후에 글을 작성해둔게 있으니 이를 참고하셔서 주기적으로 클린 작업 돌려주시는 것을 추천드립니다.

Reference
- https://blog.outsider.ne.kr/1295
- https://www.hahwul.com/2019/01/19/docker-optimization-and-cleanup-script/