[docker] 도커 이미지가 도커에서 사용하지 않는 디스크 공간을 차지하는 이유
나는 도커를 설정했고 완전히 다른 블록 장치를 사용하여 도커의 시스템 데이터를 저장했습니다.
[root@blink1 /]# cat /etc/sysconfig/docker
# /etc/sysconfig/docker
other_args="-H tcp://0.0.0.0:9367 -H unix:///var/run/docker.sock -g /disk1/docker"
참고 /disk/1
완전히 다른 하드 드라이브를 사용하고 있습니다/dev/xvdi
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.8G 5.1G 2.6G 67% /
devtmpfs 1.9G 108K 1.9G 1% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/xvdi 20G 5.3G 15G 27% /disk1
/dev/dm-1 9.8G 1.7G 7.6G 18% /disk1/docker/devicemapper/mnt/bb6c540bae25aaf01aedf56ff61ffed8c6ae41aa9bd06122d440c6053e3486bf
/dev/dm-2 9.8G 1.7G 7.7G 18% /disk1/docker/devicemapper/mnt/c85f756c59a5e1d260c3cdb473f3f4d9e55ac568967abe190eeaf9c4087afeac
문제는 계속해서 도커 이미지를 다운로드하고 도커 컨테이너를 실행하면 다른 하드 드라이브 /dev/xvda1
도 다 사용 된 것 같습니다 .
일부 도커 이미지를 제거하여이 문제를 확인할 수 있습니다. 일부 도커 이미지를 제거한 후 /dev/xvda1
이제 추가 공간이 있습니다.
내가 뭔가를 놓치고 있습니까?
내 도커 버전 :
[root@blink1 /]# docker info
Containers: 2
Images: 42
Storage Driver: devicemapper
Pool Name: docker-202:1-275421-pool
Pool Blocksize: 64 Kb
Data file: /disk1/docker/devicemapper/devicemapper/data
Metadata file: /disk1/docker/devicemapper/devicemapper/metadata
Data Space Used: 3054.4 Mb
Data Space Total: 102400.0 Mb
Metadata Space Used: 4.7 Mb
Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 3.14.20-20.44.amzn1.x86_64
Operating System: Amazon Linux AMI 2014.09
답변
이는 RedHat OS 제품군 (RedHat, Fedora, CentOS 및 Amazon Linux)에 영향을 미치는 devicemapper의 커널 문제입니다. 삭제 된 컨테이너는 매핑 된 디스크 공간을 확보하지 않습니다. 즉, 영향을받는 OS에서 컨테이너를 시작하고 다시 시작할 때 공간이 서서히 부족해집니다.
Docker 프로젝트는 이것을 알고 있으며 커널은 아마도 업스트림 ( https://github.com/docker/docker/issues/3182 ) .
일종의 해결 방법은 Docker에 쓸 자체 볼륨을 제공하는 것입니다 ( “Docker가 디스크 공간을 차지할 때” ). 이것은 실제로 공간을 먹는 것을 막지는 않습니다. 단지 시스템의 다른 부분을 파괴하는 것입니다.
내 해결책은 docker를 제거한 다음 모든 파일을 삭제 한 다음 다시 설치하는 것입니다.
sudo yum remove docker
sudo rm -rf /var/lib/docker
sudo yum install docker
이것은 내 공간을 되찾았지만 대체 인스턴스를 시작하는 것과 크게 다르지 않습니다. 더 좋은 해결책을 찾지 못했습니다.
답변
내 전체 / var / lib / docker를 삭제하는 것은 나에게 좋지 않습니다. 다음은 더 안전한 방법입니다.
해결책 1 :
문제의 다음 명령은 나를 위해 공간을 정리하고 / var / lib / docker를 삭제하거나 Windows의 경우 여기에서 디스크 이미지 위치를 확인하는 것보다 훨씬 안전 합니다 .
전에:
docker info
출력 예 :
Metadata file:
Data Space Used: 53.38 GB
Data Space Total: 53.39 GB
Data Space Available: 8.389 MB
Metadata Space Used: 6.234 MB
Metadata Space Total: 54.53 MB
Metadata Space Available: 48.29 MB
최신 버전의 Docker (예 : 17.x +)의 명령
docker system prune -a
중지 된 모든 컨테이너, 네트워크, 이미지 및 빌드 캐시를 제거한다는 경고가 표시됩니다. 일반적으로 이것을 제거하는 것이 안전합니다. (다음에 컨테이너를 실행하면 Docker 레지스트리에서 가져올 수 있습니다.)
출력 예 :
Total reclaimed space: 1.243GB
그런 다음 도커 정보를 다시 실행하여 정리 된 항목을 볼 수 있습니다.
docker info
해결 방법 2 :
이와 함께 도커 컨테이너 내부의 프로그램이 파일 시스템에 많은 / 거대한 파일을 쓰지 않는지 확인하십시오.
실행중인 도커 프로세스의 공간 사용 크기 확인
docker ps -s #may take minutes to return
또는 모든 컨테이너, 심지어 종료
docker ps -as #may take minutes to return
그런 다음 문제가되는 컨테이너를 삭제할 수 있습니다.
docker rm <CONTAINER ID>
긱 공간을 사용할 수있는 가능한 원인 찾기
docker exec -it <CONTAINER ID> "/bin/sh"
du -h
제 경우에는 프로그램이 임시 파일을 작성하고있었습니다.
( Nathaniel Waisbrot 가이 문제에 대한 답변에서 언급했으며 문제 에서 몇 가지 정보를 얻었습니다)
또는
이전 버전의 Docker (예 : 1.13.x)의 명령 (sudo가 아닌 루트로 실행) :
# Delete 'exited' containers
docker rm -v $(docker ps -a -q -f status=exited)
# Delete 'dangling' images (If there are no images you will get a docker: "rmi" requires a minimum of 1 argument)
docker rmi $(docker images -f "dangling=true" -q)
# Delete 'dangling' volumes (If there are no images you will get a docker: "volume rm" requires a minimum of 1 argument)
docker volume rm $(docker volume ls -qf dangling=true)
이후 :
> docker info
Metadata file:
Data Space Used: 1.43 GB
Data Space Total: 53.39 GB
Data Space Available: 51.96 GB
Metadata Space Used: 577.5 kB
Metadata Space Total: 54.53 MB
Metadata Space Available: 53.95 MB
답변
이동 /var/lib/docker
디렉토리를 .
/data
디렉토리에 충분한 공간이 있다고 가정하면 공간이 충분하지 않은 경우 대체합니다.
sudo systemctl stop docker
sudo mv /var/lib/docker /data
sudo ln -s /data/docker /var/lib/docker
sudo systemctl start docker
이렇게하면 도커를 재구성 할 필요가 없습니다.
답변
같은 문제가있었습니다. 내 시나리오에서는 vbox에 저장 공간이 부족했습니다. 조사 결과 내 도커 로컬 볼륨이 30GB를 차지한다는 사실이 밝혀졌습니다. Ubuntu 16.04 호스트.
당신의 것을 찾으려면.
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 3 0 1.361GB 1.361GB (100%)
Containers 0 0 0B 0B
Local Volumes 7 0 9.413GB 9.413GB (100%)
Build Cache 0B 0B
docker system prune --volumes
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all volumes not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N]
이렇게하면 사용되지 않는 로컬 볼륨의 디스크 공간이 확보됩니다. 내 시나리오에서는 20GB의 저장 공간을 확보했습니다. 중지 된 모든 컨테이너를 제거하므로 유지하려는 경우 유지하려는 컨테이너가 실행 중인지 확인하십시오 .
답변
비슷한 문제가 있었고 디스크에 모든 도커 이미지를 저장할 공간이 충분하지 않을 때 이런 일이 발생한다고 생각합니다. 나는 도커 이미지를 위해 6GB를 예약했는데 내 경우에는 충분하지 않은 것으로 판명되었습니다. 어쨌든 모든 이미지와 컨테이너를 제거했지만 여전히 디스크가 가득 찬 것처럼 보였습니다. 대부분의 공간은 / var / lib / docker / devicemapper 및 / var / lib / docker / tmp에서 사용되었습니다.
이 명령은 나를 위해 작동하지 않았습니다.
# docker ps -qa | xargs docker inspect --format='{{ .State.Pid }}' | xargs -IZ fstrim /proc/Z/root/
먼저 Docker 서비스를 중지했습니다.
sudo service docker stop
그런 다음 / var / lib / docker를 삭제했습니다.
그런 다음 누군가가 https://github.com/docker/docker/issues/18867#issuecomment-232301073 에서 제안한 것을 수행했습니다.
-
docker 메타 데이터 rm -rf / var / lib / docker의 기존 인스턴스 제거
sudo rm -rf / var / lib / docker
-
다음 옵션을 docker 데몬에 전달합니다. -s devicemapper –storage-opt dm.fs = xfs –storage-opt dm.mountopt = discard
-
도커 데몬을 시작합니다.
마지막 두 단계에서 다음을 실행합니다.
sudo dockerd -s devicemapper --storage-opt dm.fs=xfs --storage-opt dm.mountopt=discard
답변
기본적으로 Docker 정리는 볼륨을 제거하지 않습니다.
당신은 같은 것을 시도 할 수 있습니다
docker volume prune -f
답변
이슈 # 18867 에서 언급했듯이 -컨테이너 devicemapper에서 데이터 삭제 는 Github.com에서 사용 된 공간 을 확보 할 수 없습니다.
아래 명령을 실행 해보십시오.
# docker ps -qa | xargs docker inspect --format='{{ .State.Pid }}' | xargs -IZ fstrim /proc/Z/root/
이 fstrim
도구를 사용하여 devicemapper 씬 프로비저닝 된 디스크를 트리밍합니다.