Docker에 "기기에 남은 공간이 없습니다"라고 표시되지만 시스템에 충분한 공간이 있습니까?

Docker에 "기기에 남은 공간이 없습니다"라고 표시되지만 시스템에 충분한 공간이 있습니까?

다른 시스템에서 작동하는 도커 이미지를 실행하려고 합니다. (원하는 경우 dockerhub에서 가져올 수도 있습니다. dougbtv/asterisk) 그러나 일반 워크스테이션에서는 여유 공간에 대해 불평합니다. (다음과 같습니다.) 도커 이미지의 압축을 풀고 있습니다. .

실행해 보았는데 공간이 부족하다는 오류가 발생했습니다. 다음은 실행하려고 할 때 공간에 대해 불평하는 예입니다.

[root@localhost docker]# docker run -i -t dougbtv/asterisk /bin/bash
Timestamp: 2015-05-13 07:50:58.128736228 -0400 EDT
Code: System error

Message: [/usr/bin/tar -xf /var/lib/docker/tmp/70c178005ccd9cc5373faa8ff0ff9c7c7a4cf0284bd9f65bbbcc2c0d96e8565d410879741/_tmp.tar -C /var/lib/docker/devicemapper/mnt/70c178005ccd9cc5373faa8ff0ff9c7c7a4cf0284bd9f65bbbcc2c0d96e8565d/rootfs/tmp .] failed: /usr/bin/tar: ./asterisk/utils/astdb2sqlite3: Wrote only 512 of 10240 bytes
/usr/bin/tar: ./asterisk/utils/conf2ael.c: Cannot write: No space left on device
/usr/bin/tar: ./asterisk/utils/astcanary: Cannot write: No space left on device
/usr/bin/tar: ./asterisk/utils/.astcanary.o.d: Cannot write: No space left on device
/usr/bin/tar: ./asterisk/utils/check_expr.c: Cannot write: No space left on device
[... another few hundred similar lines]

물론 여유 공간이 얼마나 되는지 확인했고, 인터넷 검색을 통해 아이노드가 없기 때문에 이런 일이 발생하는 경우가 있다는 것을 발견했습니다. 그래서 둘 다 살펴보았는데 inode도 많이 있는 것을 알 수 있었습니다.

[root@localhost docker]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G   20M  3.9G   1% /dev/shm
tmpfs                    3.9G  1.2M  3.9G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/fedora-root   36G  9.4G   25G  28% /
tmpfs                    3.9G  5.2M  3.9G   1% /tmp
/dev/sda3                477M  164M  285M  37% /boot
/dev/mapper/fedora-home   18G  7.7G  8.9G  47% /home
tmpfs                    793M   40K  793M   1% /run/user/1000
/dev/sdb1                489G  225G  265G  46% /mnt/extradoze
[root@localhost docker]# df -i
Filesystem                 Inodes  IUsed     IFree IUse% Mounted on
devtmpfs                  1012063    585   1011478    1% /dev
tmpfs                     1015038     97   1014941    1% /dev/shm
tmpfs                     1015038    771   1014267    1% /run
tmpfs                     1015038     15   1015023    1% /sys/fs/cgroup
/dev/mapper/fedora-root   2392064 165351   2226713    7% /
tmpfs                     1015038    141   1014897    1% /tmp
/dev/sda3                  128016    429    127587    1% /boot
/dev/mapper/fedora-home   1166880 145777   1021103   13% /home
tmpfs                     1015038     39   1014999    1% /run/user/1000
/dev/sdb1               277252836 168000 277084836    1% /mnt/extradoze

여기서 무슨 일이 일어나고 있는지 알 수 있습니다./etc/fstab

[root@localhost docker]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Tue Mar 17 20:11:16 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/fedora-root /                       ext4    defaults        1 1
UUID=2e2535da-907a-44ec-93d8-1baa73fb6696 /boot                   ext4    defaults        1 2
/dev/mapper/fedora-home /home                   ext4    defaults        1 2
/dev/mapper/fedora-swap swap                    swap    defaults        0 0

그리고 비슷한 스택 교환 질문을 가진 사람에게 명령 결과에 대해 물었고 lvs그 결과는 다음과 같습니다.

[root@localhost docker]# lvs
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home fedora -wi-ao---- 17.79g                                                    
  root fedora -wi-ao---- 36.45g                                                    
  swap fedora -wi-ao----  7.77g         

이것은 Fedora 21 시스템입니다:

[root@localhost docker]# cat /etc/redhat-release 
Fedora release 21 (Twenty One)
[root@localhost docker]# uname -a
Linux localhost.localdomain 3.19.5-200.fc21.x86_64 #1 SMP Mon Apr 20 19:51:56 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

스토리지 드라이버:

[doug@localhost cs]$ sudo docker info|grep Driver:
Storage Driver: devicemapper
Execution Driver: native-0.2

도커 버전:

[doug@localhost cs]$ sudo docker -v
Docker version 1.6.0, build 3eac457/1.6.0

모든이 추천 기사도커를 다음으로 변경해 보았습니다./etc/sysconfig/docker

OPTIONS='--selinux-enabled --storage-opt dm.loopdatasize=500GB --storage-opt dm.loopmetadatasize=10GB'

도커를 다시 시작했지만 소용이 없었습니다. 지금으로 다시 변경했습니다 --selinux-enabled(참고: selinux를 비활성화했습니다).

또한 기사에서 다음과 같이 대체 데이터 파일을 보는 것에 대해 언급한 것을 확인했습니다.

[root@localhost doug]# ls -alhs /var/lib/docker/devicemapper/devicemapper
total 3.4G
4.0K drwx------ 2 root root 4.0K Mar 20 13:37 .
4.0K drwx------ 5 root root 4.0K Mar 20 13:39 ..
3.4G -rw------- 1 root root 100G May 13 14:33 data
9.7M -rw------- 1 root root 2.0G May 13 14:33 metadata

희소 파일이 디스크 크기보다 큰 문제입니까?

lsblk모습:

[root@localhost doug]# lsblk
NAME                        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                           8:0    0 111.8G  0 disk 
├─sda1                        8:1    0   100M  0 part 
├─sda2                        8:2    0  49.2G  0 part 
├─sda3                        8:3    0   500M  0 part /boot
├─sda4                        8:4    0     1K  0 part 
└─sda5                        8:5    0    62G  0 part 
  ├─fedora-swap             253:0    0   7.8G  0 lvm  [SWAP]
  ├─fedora-root             253:1    0  36.5G  0 lvm  /
  └─fedora-home             253:2    0  17.8G  0 lvm  /home
sdb                           8:16   0   1.8T  0 disk 
└─sdb1                        8:17   0   489G  0 part /mnt/extradoze
loop0                         7:0    0   100G  0 loop 
└─docker-253:1-1051064-pool 253:3    0   100G  0 dm   
loop1                         7:1    0     2G  0 loop 
└─docker-253:1-1051064-pool 253:3    0   100G  0 dm   

답변1

Red Hat 기반 운영 체제를 사용하는 경우 "Devicemapper"의 크기 제한은 이미지당 10GB이며, 최대 10GB의 이미지를 실행하려고 하면 이 오류가 발생할 수 있습니다. 이것이 당신의 문제일 수 있습니다. 이것을 시도해 보세요. 저에게 효과적이었습니다.

https://docs.docker.com/engine/reference/commandline/daemon/#storage-driver-options

 sudo systemctl stop docker.service

또는

sudo service docker stop

rm -rvf /var/lib/docker (Take back up of any important data; containers and images will be deleted)

이 명령을 실행하세요

docker daemon --storage-opt dm.basesize=20G

여기서 "20G"는 devicemapper에서 사용하려는 새 크기를 의미하고 docker를 다시 시작합니다.

sudo systemctl start docker.service

또는

sudo service docker start

다음을 실행하여 설정되어 있는지 확인하세요.

docker info

이것이 효과가 있기를 바랍니다!

답변2

혹시 아주 큰 이미지를 실행하려고 하시나요? RHEL은 aufs를 기본적으로 지원하지 않습니다. 따라서 devicemapper 를 사용하면 devicemapper기본적으로 컨테이너 파일 시스템의 10GB에만 액세스할 수 있습니다. 확인하다이 기사, 도움이 될 수 있습니다.

답변3

docker system df디스크 사용량이 어디서 발생하는지 확인하려면 실행하세요 . 제 경우에는 빌드 캐시가 할당된 128GB의 디스크 공간을 초과했습니다. 다양한 명령과 플래그를 시도했지만 .. prune모두 캐시 지우기를 놓쳤습니다.

빌드 캐시를 지우려면 다음을 실행하세요 docker builder prune. 이로 인해 캐시 디스크 공간 사용량이 0으로 떨어졌습니다. 다음 빌드는 10GB 이상을 다운로드해야 했기 때문에 더 오랜 시간이 걸렸습니다. 그 후에는 캐시를 다시 사용합니다.

답변4

실행은 docker system prune한동안 효과가 있었고 "기본 설정..." > "디스크"에서 "디스크 이미지 크기"를 계속 늘려야 했지만 다시 늘릴 때까지만 도움이 되었습니다.

디스크 이미지 크기를 계속 늘리고 docker system prune더 많은 공간을 차지하는 것을 거부했지만 docker volume prune이 실행이 도움이 되었습니다.

관련 정보