Docker “No space left on device” 오류 해결 방법(in MacOS)

요즘 도커 이미지를 빌드할일이 아주 많은데, 갑자기 아래와 같은 에러가 발생했습니다.

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

제가 관련해서는 이후에 글을 작성해둔게 있으니 이를 참고하셔서 주기적으로 클린 작업 돌려주시는 것을 추천드립니다.

[Docker Optimization and cleanup script(도커 최적화 하기)](https://www.hahwul.com/2019/01/19/docker-optimization-and-cleanup-script/)

Reference

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