다른 시스템에서 작동하는 도커 이미지를 실행하려고 합니다. (원하는 경우 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
이 실행이 도움이 되었습니다.