배경
이 문제에 대한 책임은 컨테이너 볼륨의 잘못된 구성과 이러한 볼륨에 기록 된 임시 데이터의 도커 유출 (릴리스 실패) 문제로 나눌 수 있습니다. 우리는 앱이 자주 그리고 / 또는 많이 쓰는 컨테이너의 임시 / 로그 / 스크래치 폴더를 모두 매핑 (호스팅 폴더 또는 기타 영구 스토리지 클레임)해야합니다. Docker는 기본적으로 .NET Core에있는 자동 생성 된 소위 EmptyDirs의 정리를 책임지지 않습니다 /var/lib/docker/overlay2/*/diff/*
. 이러한 "비 영구"폴더의 내용은 컨테이너가 중지 된 후 docker에 의해 자동으로 제거되어야하지만 분명히 그렇지 않습니다 (컨테이너가 아직 실행중인 경우 호스트 측에서 제거하는 것이 불가능할 수도 있으며 몇 달 동안 실행할 수 있음). 한 번에).
해결 방법
해결 방법에는 신중한 수동 정리가 필요하며 이미 다른 곳에서 설명했지만 가능한 한 교육적이고 일반화 할 수 있도록 노력한 사례 연구에서 몇 가지 힌트를 찾을 수 있습니다.
그래서 일어난 일은 (제 경우에는 clair-scanner
) /diff/tmp
도커의 하위 폴더에 몇 달에 걸쳐 수백 기가의 데이터를 쓸 수 있었던 범인 앱 입니다.overlay2
du -sch /var/lib/docker/overlay2/<long random folder name seen as bloated in df -haT>/diff/tmp
271G total
따라서의 모든 하위 폴더 /diff/tmp
가 매우 자명하기 때문에 (모두 형식 clair-scanner-*
이었고 생성 날짜가 사용되지 않음) 관련 컨테이너 ( docker stop clair
)를 중지 하고이 오래된 하위 폴더를에서 조심스럽게 제거 diff/tmp
하여 하나의 (가장 오래된) 하위 폴더 부터 신중하게 시작했습니다. Docker 엔진에 미치는 영향 테스트 ( systemctl restart docker
디스크 공간을 확보 하려면 다시 시작 [ ] 이 필요함 ) :
rm -rf $(ls -at /var/lib/docker/overlay2/<long random folder name seen as bloated in df -haT>/diff/tmp | grep clair-scanner | tail -1)
Docker를 다시 설치하거나 전체 폴더를 제거 할 필요없이 수백 기가 바이트의 디스크 공간을 회수했습니다. 디스크 공간을 확보하려면 docker 데몬을 다시 시작해야했기 때문에 실행중인 모든 컨테이너를 한 지점에서 중지해야했기 때문에 먼저 장애 조치 컨테이너가 / 다른 노드에서 올바르게 실행되고 있는지 확인하세요. docker prune
명령이 구식 /diff/tmp
(또는 심지어 /diff/*
다른 스위치를 통해) 데이터도 포함 할 수 있기를 바랍니다 .
이제 3 년 된 문제입니다. Docker 포럼에서 풍부하고 다채로운 역사를 읽을 수 있습니다. 여기서 위 솔루션의 애플리케이션 로그를 겨냥한 변형이 2019 년에 제안되었으며 여러 설정에서 작동 한 것으로 보입니다 : https : // forums.docker.com/t/some-way-to-clean-up-identify-contents-of-var-lib-docker-overlay/30604