Docker는 "장치에 남은 공간이 없습니다"라고 말하지만 시스템에 충분한 공간이 있습니까?


19

다른 시스템에서 작동하는 도커 이미지를 실행하려고합니다 (원하는 경우 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가 없기 때문에 이런 일이 발생한다는 것을 알았습니다. 두 가지를 모두 살펴보면 많은 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   

어떤 스토리지 드라이버를 사용하고 있습니까? sudo docker info|grep Driver:
mattdm

좋은 질문 @ mattdm, 그것은 devicemapper실행 드라이버 native-0.2입니다. 그 정보와 도커 버전으로 질문을 업데이트했습니다.
dougBTV

당신은 출력을 첨부 할 수 lsblk있습니까? 이 블로그 게시물 은 약간 오래되었지만 도움 이 될 수 있습니다.
mattdm

내가 가서 그것을 업데이트 나 또한 언급 한 몇 가지를 체크 아웃 블로그 게시물을 걸었다 포인터 감사가 @mattdm
dougBTV

Docker는 / var / lib / docker / tmp / 70 ....에서 tar 파일을 / var / lib / docker / devicemapper /. 아래의 디렉토리로 추출합니다. 해당 경로에 하위 문자열 'devicemapper'가 있다는 사실 도 커가 일부 블록 저장 장치를 사용하기 위해 도커 특정 블록 장치에 매핑한다고 생각합니다. 이것은 아마도 docker 명령 전후에 lsblk / df와 friends를 실행하면 매핑 된 장치를 놓칠 것입니다 (docker 자체 정리 후?). 오류가 발생하기 시작한 후 번들링 프로세스를 ctrl-z로 ctrl / z하고 df / dm 도구를 사용하여 파킹을 시작했을 것입니다. 그렇게 할 수 있습니까?
Lmwangi

답변:


11

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

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


감사합니다! 나중에이 사진을 드리겠습니다. 나는 여전히이 기계를 가지고 있지만, 현재는 구식이다. 그래서 최신 Fedora & Docker로 업데이트하는 것이 나을 수도있다.
dougBTV

나는 이것을 포기했지만 도커는 나중에 시작을 거부했습니다. "그냥 redhat을 사용하지 마십시오"가 더 간단한 해결책이라고 생각합니다 :)
samthebest

1
sudo dockerd-current --storage-opt dm.basesize=20G... RedHat의 docker daemon => dockerd입니다.
mikiemorales

1
명령 docker daemon --storage-opt dm.basesize=20G이 더 이상 존재하지 않는 것 같습니다.
Alex

3

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


3
이 링크가 질문에 대답 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 할 수있는 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다.
Anthon

0

실행 docker system prune은 잠시 동안 작동했지만 환경 설정 ...> 디스크에서 "디스크 이미지 크기"를 계속 증가시켜야했지만 다시 증가시킬 때까지만 도움이되었습니다.

디스크 이미지 크기를 계속 늘리기를 거부하고 docker system prune더 이상 공간을 요구하지 않았지만 docker volume prune이번에는 실행 이 도움이되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.