Docker sagt, "kein Platz mehr auf dem Gerät", aber das System hat viel Platz?

19

Ich versuche, ein Docker-Image auszuführen, das auf anderen Systemen funktioniert (und Sie können es sogar von dockerhub abrufen, wenn Sie möchten: es ist dougbtv/asterisk). Auf meiner allgemeinen Workstation beschwert es sich jedoch über freien Speicherplatz, wenn es aussieht. Die Docker-Images werden entpackt.

Ich versuche, es auszuführen, und wenn ich es tue, erhalte ich die Fehlermeldung, dass nicht genügend Speicherplatz vorhanden ist. Hier ist ein Beispiel, in dem ich versuche, es auszuführen, und es sich über den Speicherplatz beschwert.

[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]

Natürlich überprüfe ich, wie viel Speicherplatz verfügbar ist, und durch googeln stelle ich fest, dass dies manchmal passiert, weil Sie keine Inodes mehr haben. Also schaue ich mir beide an und sehe, dass es auch viele Inodes gibt.

[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

Und so können Sie ein bisschen sehen, was hier los ist /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

Und ich habe auch jemandem mit einer ähnlichen Stapelaustauschfrage nach den Ergebnissen des lvsBefehls gefragt. Dies zeigt:

[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         

Es ist ein Fedora 21-System:

[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

Speichertreiber:

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

Docker-Version:

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

Anhand dieses empfohlenen Artikels habe ich versucht, den Docker auf zu ändern/etc/sysconfig/docker

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

Und Docker neu gestartet, ohne Erfolg. Ich habe es wieder auf nur geändert --selinux-enabled(Hinweis: Ich habe Selinux deaktiviert)

Zusätzlich ist mir aufgefallen, dass in dem Artikel erwähnt wurde, dass die Ersatzdatendatei wie folgt aussieht:

[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

Ist es ein Problem, dass die Sparse-Datei größer als die Größe der Festplatte ist?

Meine lsblksieht aus wie:

[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   
dougBTV
quelle
Welchen Speichertreiber verwenden Sie? sudo docker info|grep Driver:
Mattdm
Gute Frage @mattdm, es ist devicemappermit Ausführungstreiber native-0.2. Ich habe meine Frage mit diesen Informationen und der Docker-Version aktualisiert.
dougBTV
kannst du den ausgang von anhängen lsblk? Dieser Blogbeitrag kann helfen, obwohl er etwas veraltet ist.
Mattdm
Ich ging und aktualisierte es und ging durch den Blog-Beitrag, um ein paar Dinge zu überprüfen, die ich auch festgestellt habe, schätzen den Zeiger dort @mattdm
dougBTV
Docker extrahiert eine tar-Datei aus / var / lib / docker / tmp / 70 .... in ein Verzeichnis unter / var / lib / docker / devicemapper / .... Die Tatsache, dass sich in diesem Pfad die Teilzeichenfolge 'devicemapper' befindet Ich glaube, Docker ordnet ein Blockspeichergerät einem Docker-spezifischen Blockgerät zur Verwendung zu. Dies bedeutet wahrscheinlich, dass Sie das zugeordnete Gerät verpassen werden, wenn Sie lsblk / df und friends vor oder nach dem Docker-Befehl ausführen (Docker bereinigt nach sich selbst?). Ich würde den Unbundling-Prozess wahrscheinlich mit gedrückter Strg-Z-Taste ausführen, nachdem die Fehler aufgetaucht sind und mit df / dm-Tools herumgestochert haben. Können Sie das tun?
Lmwangi,

Antworten:

11

Wenn Sie ein auf Red-Hat basierendes Betriebssystem verwenden, sollten Sie wissen, dass "Devicemapper" auf 10 GB pro Image beschränkt ist. Wenn Sie versuchen, ein Image mit bis zu 10 GB auszuführen, kann dieser Fehler auftreten. Das könnte dein Problem sein. Probieren Sie es aus, es hat bei mir funktioniert

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

 sudo systemctl stop docker.service

oder

sudo service docker stop

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

Führen Sie diesen Befehl aus

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

Wobei "20G" sich auf die neue Größe bezieht, die der Devicemapper annehmen soll, und Docker dann neu startet

sudo systemctl start docker.service

oder

sudo service docker start

Überprüfen Sie, ob es festgelegt ist, indem Sie ausführen

docker info

Hoffe das klappt!

RIcardo
quelle
Vielen Dank! Ich werde das später ausprobieren. Ich habe diese Maschine immer noch im Angebot, aber sie ist mittlerweile ziemlich veraltet, sodass ich möglicherweise ein Update auf die neueste Version von Fedora & Docker vornehmen muss.
dougBTV
Ich habe es ausprobiert, aber Docker weigerte sich, danach zu starten. Ich denke, "nur nicht Redhat verwenden" wäre eine einfachere Lösung :)
Samthebest
1
sudo dockerd-current --storage-opt dm.basesize=20G... das ist Docker Daemon => Docker in RedHat.
Mikiemorales
1
Der Befehl docker daemon --storage-opt dm.basesize=20Gscheint nicht mehr zu existieren.
Alex
3

Versuchen Sie zufällig, ein sehr großes Bild zu erstellen? RHEL hat keine auf native Unterstützung. So verwenden Sie devicemapper Wenn Sie verwenden devicemapper, haben Sie standardmäßig nur Zugriff auf 10 GB für Ihr Container-Dateisystem. Überprüfen Sie diesen Artikel , es kann hilfreich sein.

Aymeric
quelle
3
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier einzuschließen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verlinkte Seite ändert.
Anthon
0

Das Laufen docker system prunehat eine Weile funktioniert, dann musste ich die "Festplatten-Image-Größe" in den Einstellungen weiter erhöhen ...> Festplatte, aber das half nur, bis ich sie wieder vergrößerte.

Ich weigere mich, die Größe des Festplatten-Images weiter zu erhöhen und docker system prunebeanspruche keinen weiteren Speicherplatz, aber das Ausführen docker volume prunehat diesmal geholfen.

AVProgrammer
quelle