Docker Fout: geen ruimte over op apparaat

Ik heb Docker op een Debian 7-machine op de volgende manier geïnstalleerd

$ echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
$ sudo apt-get update
$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh

Daarna probeerde het voor het eerst een afbeelding te maken, het is mislukt met de volgende fout

time="2015-06-02T14:26:37-04:00" level=info msg="[8] System error: write /sys/fs/cgroup/docker/01f5670fbee1f6687f58f3a943b1e1bdaec2630197fa4da1b19cc3db7e3d3883/cgroup.procs: no space left on device"

Hier is de Docker-info

Containers: 2
Images: 21
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 25
Dirperm1 Supported: true
Execution Driver: native-0.2
Kernel Version: 3.16.0-0.bpo.4-amd64
Operating System: Debian GNU/Linux 7 (wheezy)
CPUs: 2
 Total Memory: 15.7 GiB
WARNING: No memory limit support
 WARNING: No swap limit support

Hoe kan ik het geheugen verhogen? Waar zijn de systeemconfiguraties opgeslagen?

Van de suggesties van KAL:

Toen ik alle afbeeldingen en containers kwijt ben, maakte het wat ruimte en de afbeelding die langer werd gebouwd voordat hij niet met dezelfde fout faalde. Dus de vraag is, welke ruimte is dit verwijst naar en hoe configureer ik het?


Antwoord 1, Autoriteit 100%

De huidige beste praktijk is:

docker system prune

Let op de uitvoer van deze opdracht voordat u de consequenties accepteert:

WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache
Are you sure you want to continue? [y/N]

Met andere woorden, doorgaan met deze opdracht is permanent. Houd in gedachten dat de beste praktijk is om te behandelen gestopt containers als Ephemeral IE U moet uw werk met Docker ontwerpen om deze gestopte containers niet in de buurt te houden. Misschien wilt u overwegen gebruik te maken van de --rmVlag bij runtime Als u uw containers niet actief debuggen.

Zorg ervoor dat u dit antwoord , re: volumes

Mogelijk bent u ook geïnteresseerd in dit antwoord , als docker system pruneWerkt niet voor jou.


Antwoord 2, Autoriteit 69%

Ik had dezelfde foutmelding en lol het op deze manier op:

1. Verwijder de verweesde volumes in Docker, u kunt de ingebouwde opdracht Volume Volume gebruiken. De ingebouwde opdracht verwijdert ook elke map in / var / lib / docker / volumes die geen volume is, dus zorg ervoor dat u er niets in hebt geplaatst dat u wilt opslaan.

WAARSCHUWING Wees heel voorzichtig met dit als u een aantal gegevens hebt die u wilt behouden

opruimen:

$ docker volume rm $(docker volume ls -qf dangling=true)

Aanvullende opdrachten:

Lijst bungelende volumes:

$ docker volume ls -qf dangling=true

Lijst alle volumes:

$ docker volume ls

2. Overweeg ook om alle ongebruikte beelden te verwijderen.

Krijg eerst de <none>Afbeeldingen (die soms worden gegenereerd tijdens het bouwen van een afbeelding en als ze om welke reden dan ook het beeldgebouw werd onderbroken, blijven ze daar).

hier is een mooi script dat ik gebruik om ze te verwijderen

docker rmi $(docker images | grep '^<none>' | awk '{print $3}')

Als je Docker Compose gebruikt om lokaal afbeeldingen te bouwen voor elk project. U zult eindigen met veel afbeeldingen die gewoonlijk worden genoemd als uw map (bijvoorbeeld als uw projectmap Hallo heet, dan vindt u afbeeldingen met de naam Hello_blablabla). dus overweeg ook om al deze afbeeldingen te verwijderen

je kunt het bovenstaande script bewerken om ze te verwijderen of ze handmatig verwijderen met

docker rmi {image-name}


Antwoord 3, autoriteit 14%

Controleer of er vrije ruimte is op /var, aangezien Docker hier standaard de afbeeldingsbestanden opslaat (in /var/lib/docker).

Ruim eerst alles op door docker ps -ate gebruiken om alle containers (inclusief gestopte) weer te geven en docker rmom ze te verwijderen; gebruik vervolgens docker imagesom alle afbeeldingen weer te geven die u hebt opgeslagen en docker rmiom ze te verwijderen.

Verander vervolgens de opslaglocatie met een -g optie op de docker-daemon of door /etc/default/dockerte bewerken en de optie -gtoe te voegen aan DOCKER_OPTS. -gspecificeert de locatie van de “Docker-runtime”, wat eigenlijk alles is dat Docker maakt terwijl u afbeeldingen maakt en containers uitvoert. Kies een locatie met voldoende ruimte, aangezien de gebruikte schijfruimte in de loop van de tijd zal toenemen. Als u /etc/default/dockerbewerkt, moet u de docker-daemon opnieuw opstarten om de wijziging door te voeren.

Je zou nu een nieuwe afbeelding moeten kunnen maken (of er een uit Docker Hub halen) en je zou een aantal bestanden moeten zien worden aangemaakt in de map die je hebt opgegeven met de -g optie.


Antwoord 4, autoriteit 10%

Zoals al vermeld,

docker system prune

Helpt, maar met docker 17.06.1 en later zonder ongebruikte volumes te snoeien.
Omdat Docker 17.06.1 ook de volgende opdracht-pruimenvolumes is, ook:

docker system prune --volumes

Vanaf de Docker Documentation: https://docs.docker.com/config/pruning/

Het PRUN-opdracht Docker System is een snelkoppeling die afbeeldingen, containers en netwerken pruimen. In Docker 17.06.0 en eerder zijn de volumes ook gesnoeid. In Docker 17.06.1 en hoger moet u de Vlag van de Verenigingen opgeven voor Docker System Prune om volumes te snoeien.

Als u volumes wilt snoeien en afbeeldingen en containers wilt behouden:

docker volume prune

Antwoord 5, Autoriteit 6%

Docker voor Mac

Dus docker system pruneen docker system prune --volumesSuggereerd in andere antwoorden die Sommige ruimte telkens, maar uiteindelijk elke keer worden vrijgegeven Ik had alles wat ik de fout had gekregen.

Wat het hoofdnummer daadwerkelijk heeft vastgesteld Wising de Docker.rawBestand die Docker voor Mac gebruikt voor opslag en opnieuw opstarten.

Om dat bestand te vinden Open Docker voor Mac en ga naar *

Preferences > Resources > Advanced > Disk Image Location

* Dit is voor versie 2.2.0.5, maar op oudere versies zou het vergelijkbaar moeten zijn

Op nieuwere versies van Docker voor Mac **, toont het u de werkelijke grootte van dat bestand op schijf daar in de UI, evenals de maximale toegewezen grootte. Je zult waarschijnlijk zien dat het enorm is. Bijvoorbeeld op mijn machine was het 41 GB !

**In oudere versies wordt niet het werkelijke schijfgebruik in de gebruikersinterface weergegeven, en MacOS Finder altijdtoont de bestandsgrootte als de maximaal toegewezen grootte. U kunt de werkelijke grootte op de schijf controleren door de map in een terminal te openen en du -h Docker.raw

uit te voeren.

Ik heb Docker.rawverwijderd, Docker voor Mac opnieuw opgestart en het bestand werd automatisch opnieuw aangemaakt en was weer 0GB.

Alles bleef werken zoals voorheen, hoewel ik natuurlijk mijn Docker-cache kwijt was. Zoals verwacht begon het bestand na het uitvoeren van een paar Docker-commando’s weer vol te raken met een paar GB aan spullen, maar niet in de buurt van41 GB.


Bijwerken


Een paar maanden later was mijn Docker.rawweer gevuld tot een vergelijkbare grootte. Dus deze methode werkte, maar moet om de paar maanden worden herhaald. Voor mij is dat prima.


Een opmerking over waarom dit werkt – ik moet aannemen dat het een bug is in Docker voor Mac. Het lijkt er echt op dat docker system prune/ docker system prune --volumesde inhoud van dit bestand volledig zou moeten wissen, maar het lijkt erop dat het bestand andere dingen verzamelt die niet kunnen worden verwijderd door deze commando’s. Hoe dan ook, het handmatig verwijderen lost het probleem op!


Antwoord 6, autoriteit 5%

Als het slechts een testinstallatie van Docker is (dus geen productie) en u niet geïnteresseerd bent in een nucleaire opschoning, kunt u:

maak alle containers schoon:
docker ps -a | sed '1 d' | awk '{print $1}' | xargs -L1 docker rm

schoon alle afbeeldingen:
docker images -a | sed '1 d' | awk '{print $3}' | xargs -L1 docker rmi -f

Nogmaals, ik gebruik dit in mijn ec2-instanties bij het ontwikkelen van Docker, niet in een serieus QA- of productiepad. Het mooie is dat als je je Dockerfile(s) hebt, het makkelijk te herbouwen en/of docker pullis.


Antwoord 7, autoriteit 5%

om alle ongebruikte containers, volumes, netwerken en afbeeldingen in één keer te verwijderen (https://docs.docker.com/engine/reference/commandline/system_prune/#related-commands):

docker system prune -a -f --volumes

als het niet genoeg is, kan men eerst actieve containers verwijderen:

docker rm -f $(docker ps -a -q)
docker system prune -a -f --volumes

het vergroten van /var/lib/docker of het gebruiken van een andere locatie met meer ruimte is ook een goed alternatief om van deze fout af te komen (zie Hoe verander ik de installatiemap van de docker-image?)


Antwoord 8, autoriteit 3%

Als u Docker Desktop gebruikt, kunt u de Schijfimage-groottevergroten in Geavanceerde instellingendoor naar Voorkeurenvan Docker te gaan.

Hier is de schermafbeelding van macOS:


Antwoord 9, autoriteit 3%

Docker laat bungelende afbeeldingen achter die je ruimte in beslag kunnen nemen. Voer het volgende uit om op te ruimen na Docker:

docker image prune [-af if you want to force remove all images]

of met oudere versies van Docker:

docker rm $(docker ps -q -f 'status=exited')
docker rmi $(docker images -q -f "dangling=true")

Dit verwijdert verlaten en bungelende beelden, die hopelijk apparaatruimte opruimt.


Antwoord 10, Autoriteit 3%

  1. Schone Bungled Images docker rmi $(docker images -f "dangling=true" -q)
  2. Verwijder ongewenste volumes
  3. Verwijder ongebruikte beelden
  4. Verwijder ongebruikte containers

Antwoord 11, Autoriteit 3%

Ik heb ook dit probleem op RHEL-machine aangetroffen. Ik heb geen APT-oplossing gevonden overal op stapel-overloop en docker-hub-community.
Als u met deze kwestie geconfronteerd bent, zelfs na onderstaande opdracht:

Docker System Prune –Alle

De oplossing die eindelijk werkte:

  1. Docker info
    • om de huidige Docker Storage-stuurprogramma
    • te controleren

    • De mijne was: Storage Driver: Devicemapper; Als u opslagstuurprogramma heeft als overlay2 Niets om u zorgen over te maken. Oplossing zal nog steeds voor u werken.
  2. DF -H
    • Dit is om de beschikbare bestandssystemen op de machine en het pad te controleren waar ze zijn gemonteerd.
      Twee gemonteerde weg om een ​​opmerking te hebben:
    • / dev / mapper / rootvg-var 7.6G 1,2 g 6.1g 16% / var
    • / dev / mapper / rootvg-apps 60G 9.2G 48G 17% / apps
    • Opmerking – Standaard Docker-opslagpad is / var / lib / docker. Het heeft ruimte beschikbaar ~ 6 GB en vandaar alle ruimteverwante kwesties. Dus eigenlijk moet ik de standaardopslag verplaatsen naar een andere opslag waar de beschikbare ruimte meer is. Voor mij zijn bestand Sysym Path ‘/ dev / mapper / rootvg-apps’ die op / apps is gemonteerd. Nu is taak om te bewegen / var / lib / docker naar iets likes / apps / newdocker / docker.
  3. MKDIR / APPS / NEWDOCKER / DOCKER
  4. CHMOD -R 777 / APPS / NIEUWDOCKER / DOCKER
  5. Werk Docker.Serive-bestand bij op Linux die zich bevindt onder: / usr / lib / systemd / systeem
    • vi /usr/lib/systemD/system/docker.service
  6. als het opslagapparaat devicemapper is, becommentarieert u de bestaande ExecStart-regel en voegt u deze hieronder toe onder [Service]:
    • ExecStart=
    • ExecStart=/usr/bin/dockerd -s devicemapper –storage-opt dm.fs=xfs –storage-opt dm.basesize=40GB -g /apps/newdocker/docker –exec-opt native.cgroupdriver =cgroupfs
  7. Of als het opslagapparaat overlay2 is:
    • voeg gewoon -g /apps/newdocker/docker toe aan de bestaande ExexStart-instructie.
    • Iets als ExecStart=/usr/bin/dockerd -g /apps/newdocker/docker -H fd:// –containerd=/run/containerd/containerd.sock
  8. rm -rf /var/lib/docker (alle bestaande docker-gegevens worden verwijderd)
  9. systemctl stop docker
  10. ps aux | grep -i docker | grep -v grep
    • Als er geen uitvoer is geproduceerd door het bovenstaande commando, herlaad dan systemd daemon met het onderstaande commando.
  11. systemctl daemon-reload
  12. systemctl start docker
  13. docker-info
    • Bekijk de beschikbare dataruimte: 62,15 GB na overstappen op docker naar nieuw bestandssysteem.
  14. KLAAR

Antwoord 12, autoriteit 2%

1. Containers verwijderen:

$ docker rm $(docker ps -aq)

2. Afbeeldingen verwijderen:

$ docker rmi $(docker images -q)

In plaats van stap 1 en 2 uit te voeren, kunt u het volgende doen:

docker system prune

Dit commando verwijdert:

  • Alle gestopte containers
  • Alle volumes die niet door ten minste één container worden gebruikt
  • Alle netwerken die niet door ten minste één container worden gebruikt
  • Alle bungelende afbeeldingen

Antwoord 13, autoriteit 2%

Ik ging naar de docker-instellingen en wijzigde de beschikbare afbeeldingsruimte. Het bereikte de limiet tijdens het maken van de nieuwe afbeelding met docker build. Dus ik heb gewoon het beschikbare bedrag verhoogd.


Antwoord 14, autoriteit 2%

u kunt ook gebruiken:

docker system prune

of voor alleen volumes:

docker volume prune

Antwoord 15, autoriteit 2%

In mijn geval had ik niet zoveel afbeeldingen/containers, maar de buildcache vulde mijn Docker-schijf.

Je kunt zien dat dit het probleem is door het uit te voeren

docker system df

Uitvoer:

TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              22                  13                  7.581GB             3.899GB (51%)
Containers          15                  0                   2.166GB             2.166GB (100%)
Local Volumes       4                   4                   550.2MB             0B (0%)
Build Cache         611                 0                   43.83GB             43.83GB!!!!!!!!!

Het onderstaande commando lost dat probleem op

docker builder prune

Antwoord 16

Als je de ongebruikte containers al hebt schoongemaakt, afbeeldingen met

docker system prune -a

Controleer of je ongezonde containers hebt. Ze kunnen zich echt op een rare en onvoorspelbare manier gedragen. In mijn geval kreeg ik daarom deze foutmelding, zelfs als ik tonnen schijfruimte had.

docker ps -a zal alle containers weergeven. Als een van deze er zo uitziet:

CONTAINER ID   IMAGE          COMMAND   CREATED          STATUS                     PORTS           NAMES
4c01db0b339c   ubuntu:12.04   bash      17 seconds ago   Up 16 seconds (unhealthy)  3300-3310/tcp   webapp

U moet de docker-daemon opnieuw opstarten.


Antwoord 17

Reinig Docker met de volgende opdracht:

docker images --no-trunc | grep '<none>' | awk '{ print $3 }' \
| xargs docker rmi

Antwoord 18

In mijn geval creëerde de installatie van ubuntu-server 18.04.1 [om de een of andere vreemde reden] een logisch LVM-volume met slechts 4 GB groot in plaats van 750 GB.
Daarom krijg ik bij het ophalen van afbeeldingen de foutmelding “geen ruimte over op het apparaat”.
De oplossing is eenvoudig:

lvextend -l 100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

Antwoord 19

Voer niet alleen de opdracht docker pruneuit. Het verwijdert alle docker-netwerken, containers en afbeeldingen. U kunt dus uiteindelijk ook de belangrijke gegevens kwijtraken.

De fout geeft aan dat “Geen ruimte over op het apparaat”, dus we moeten gewoon wat ruimte vrijmaken.

De gemakkelijkste manier om wat ruimte vrij te maken, is door loshangende afbeeldingen te verwijderen.

Als de oude gemaakte afbeeldingen niet worden gebruikt, worden deze afbeeldingen bungelende afbeeldingen genoemd of zijn er enkele cacheafbeeldingen die u kunt verwijderen.

Gebruik de onderstaande opdrachten.
Om alle bungelende afbeeldingen weer te geven afbeelding id.

docker images -f "dangling=true" -q

om de afbeeldingen op afbeeldings-ID te verwijderen.

docker rmi IMAGE_ID

Op deze manier kun je wat ruimte vrijmaken en opnieuw beginnen met hacken met docker 🙂


Antwoord 20

Uw cgroups hebben de cpuset-controller ingeschakeld. Deze controller is vooral handig in een NUMA-omgeving waar je nauwkeurig kunt specificeren welke CPU/geheugenbank je taken mogen uitvoeren.

Standaard zijn de verplichte cpuset.memsen cpuset.cpusniet ingesteld, wat betekent dat er “geen ruimte meer” is voor uw taak, vandaar de fout.

De eenvoudigste manier om dit op te lossen is door cgroup.clone_childrenin te schakelen op 1 in de root-cgroup. In jouw geval zou het

. moeten zijn

echo 1 > /sys/fs/cgroup/docker/cgroup.clone_children

Het zal het systeem in feite instrueren om de cpuset.memsen cpuset.cpusvan de container automatisch te initialiseren vanuit hun bovenliggende cgroup.


Antwoord 21

Als je de boot2docker-image gebruikt via Docker Toolkit, dan komt het probleem voort uit het feit dat de virtuele boot2docker-machine geen ruimte meer heeft.

Als je een docker importdoet of een nieuwe afbeelding toevoegt, wordt de afbeelding gekopieerd naar de /mnt/sda1die mogelijk vol is geworden.

Een manier om te controleren welke ruimte je beschikbaar hebt in de afbeelding, is door te ssh naar de vm en df -Huit te voeren en de resterende ruimte in /mnt/sda1 te controleren

Het ssh-commando is
docker-machine ssh default

Zodra je zeker weet dat het inderdaad een ruimteprobleem is, kun je ofwel opschonen volgens de instructies in sommige van de antwoorden op deze vraag, of je kunt ervoor kiezen om het formaat van de boot2docker-afbeelding zelf te wijzigen door de ruimte op /mnt/sda1

U kunt de instructies hier volgen om het formaat van de afbeelding te wijzigen
https://gist.github.com/joost/a7cfa7b741d9d39c1307


Antwoord 22

Ik voer de onderstaande opdrachten uit.

Het is niet nodig om afbeeldingen achteraf opnieuw te bouwen.

docker rm $(docker ps -qf 'status=exited')
docker rmi $(docker images -qf "dangling=true")
docker volume rm $(docker volume ls -qf dangling=true)

Deze verwijderen verlaten/hangende containers en bungelende volumes.


Antwoord 23

Het kan te wijten zijn aan de standaard opslagruimte die is ingesteld op 40 GB (standaardpad, /var/lib/docker)

u kunt het opslagvolume wijzigen zodat het naar een ander pad wijst

  • bewerk bestand -> /etc/sysconfig/docker-storage
  • onderstaande regel bijwerken (toevoegen indien niet bestaat)

DOCKER_STORAGE_OPTIONS=’–storage-driver=overlay –graph=CUSTOM_PATH’

  • Start docker opnieuw
    systemctl stop docker
    systemctl daemon-reload
    systemctl start docker

als u de opdracht docker info uitvoert (het moet het opslagstuurprogramma als overlay tonen)


Antwoord 24

Zoveel berichten over snoei-statements. Het is waar dat deze opdracht docker-bestanden opruimt, maar uw systeem niet repareert als de daadwerkelijke opslag wordt gehinderd. Voor mij was het probleem dat de opslag van de server gewoon vol was. Daarom had ik twee opties.

Optie 1: bestaande ruimte opruimen

  1. voer alle systeemsnoeiopdrachten uit die anderen hebben gezegd.
  2. df -H, hoeveel ruimte is er nog?
  3. Controleer wat zoveel ruimte op uw systeem in beslag neemt met du --block-size=M -a / | sort -n -r | head -n 20, dat toont de 20 grootste bestanden.
  4. verwijder bestanden of verplaats ze van het systeem.

Optie 2: krijg meer ruimte

  1. Voeg meer ruimte toe aan de harde schijf en breid uit. Als je maar één HD hebt zoals ik, moest ik het besturingssysteem “gparted” aankoppelen en de schijf uitbreiden.

Antwoord 25

In mijn geval heb ik de docker system dfuitgevoerd om erachter te komen welk onderdeel meer ruimte in beslag neemt, en vervolgens heb ik de docker system prune -auitgevoerd om op te schonen alle bungelende containers, afbeeldingen, enz. Ten slotte heb ik het docker volume rm $(docker volume ls -qf dangling=true)uitgevoerd om de bungelende volumes op te ruimen.

Hieronder staan de opdrachten die in volgorde worden uitgevoerd.

docker system df
docker system prune -a
docker volume rm $(docker volume ls -qf dangling=true)

Antwoord 26

Het lijkt erop dat er een paar manieren zijn waarop dit kan gebeuren. Het probleem dat ik had was dat de docker-schijfkopie de maximale grootte had bereikt (Docker Whale -> Preferences -> Disk als je wilt zien hoe groot dat is in OSX).

Ik heb de limiet verhoogd en was klaar om te gaan. Ik weet zeker dat het opschonen van ongebruikte afbeeldingen ook zou werken.


Antwoord 27

Voor mij deed docker system prunede truc. Ik gebruik mac os.


Antwoord 28

$ docker rm $(docker ps -aq)

Dit werkte voor mij

docker system prune

lijkt een betere optie te zijn met de nieuwste versie


Antwoord 29

Ik kwam dit net tegen. Ik gebruik Ubuntu 20.04. Wat werkte? Docker opnieuw installeren:

sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo apt-get install docker-ce docker-ce-cli containerd.io

Een beetje grof, ik weet het. Ik heb geprobeerd Docker te snoeien, maar het zou nog steeds niet werken.

Other episodes