목차
728x90

문제 상황
배포를 위해 jar 파일을 통한 도커 이미지 빌드 과정에서 에러가 발생했다.
'failed to prepare ... : no space left on device"

문제 원인
서버 디스크의 용량이 부족함을 확인했다. 어디가 꽉 찬건지 확인해보자.
문제 해결 과정
우선 df -h로 파티션 체크를 해본다.
bash
닫기# 파티션 체크 $ df -h

이어서 df -i로 inode 값을 체크한다.
Inodes: Index Node의 줄임말로, 파일에 대한 메타데이터를 저장한다.
파일의 소유자 ,그룹, 권한 크기, 생성 시간, 마지막 수정 시간 등의 정보를 가지며,
디렉토리나 파일의 식별자 역할을 한다.
bash
닫기# inodes 체크 $ df -i

절대적으로 /dev/xvda3 예하의 특정 디렉토리가 가득 차서 문제가 생겼음을 확인했다.
이하의 명령어를 통해 어느 부분에서 용량을 차지하고 있는지 조회한다.
bash
닫기- for i in [경로]; do echo $i; find $i | wc -l; done # 예시 : - for i in /*; do echo $i; find $i | wc -l; done

/var에 가장 용량을 차지하고 있는 비중이 많음을 확인했다.
다시 한번 하위의 폴더를 상기 명령어로 검사하며 문제의 원인을 탐색한다.
bash
닫기- for i in [경로]; do echo $i; find $i | wc -l; done # 예시 : - for i in /*; do echo $i; find $i | wc -l; done

~ 타고 들어가는중

var/lib/docker/vfs/dir 예하의 사용하지 않는 볼륨, 컨테이너, 빌드 레이어들이 많이 저장되어 있었고
이들이 쌓여 문제를 일으키고 있던 것이다.
아래의 명령어를 통해 도커 시스템에서 사용하지 않는 모든 리소스를 정리하자.
bash
닫기docker system prune -a --volumes # --volumes는 볼륨도 같이 삭제하라는 뜻
위의 명령어를 통해 수행되는 작업은 아래와 같다.
- 사용하지 않는 불필요 이미지 삭제
- 사용하지 않는 불필요 컨테이너 삭제
- 사용하지 않는 네트워크 삭제
- 사용하지 않는 볼륨도 삭제
이 명령어는 도커 시스템의 디스크 공간을 최적화하고 리소스를 정리하는데 유용하다.
그러나 필요한 리소스가 아닌지 반드시 확인한 후에 사용하자.


정리 이후 df-ih를 통해 디스크내 inode와 용량 차지 비율을 다시 확인해보자.
bash
닫기df -ih

결론
- 문제 원인 : 과도한 이미지 빌드로 인해 불필요 리소스와 Inode가 많이 쌓여있었음
- 해결 방법 : docker system prune -a --volumes 로 불필요 리소스를 정기적으로 제거

'DEV > Infrastructure' 카테고리의 다른 글
[AWS] IAM, VPC의 개념, AWS CLI 설치, 엑세스 코드 발급 (0) | 2024.02.22 |
---|---|
[NCP, Docker, Github Actions] 를 활용한 CI / CD 구축 (4) | 2024.01.09 |
[NCP, 도커] 서버 생성부터 배포까지 (4 / 4) (1) | 2024.01.08 |
[NCP, 도커] 서버 생성부터 배포까지 (3 / 4) (0) | 2024.01.07 |
[NCP, 도커] 서버 생성부터 배포까지 (2 / 4) (0) | 2024.01.02 |