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 --rm
Vlag 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 prune
Werkt 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 -a
te gebruiken om alle containers (inclusief gestopte) weer te geven en docker rm
om ze te verwijderen; gebruik vervolgens docker images
om alle afbeeldingen weer te geven die u hebt opgeslagen en docker rmi
om ze te verwijderen.
Verander vervolgens de opslaglocatie met een -g optie op de docker-daemon of door /etc/default/docker
te bewerken en de optie -g
toe te voegen aan DOCKER_OPTS
. -g
specificeert 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/docker
bewerkt, 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 prune
en docker system prune --volumes
Suggereerd 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.raw
Bestand 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.raw
verwijderd, 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.raw
weer 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 --volumes
de 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 pull
is.
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%
- Schone Bungled Images
docker rmi $(docker images -f "dangling=true" -q)
- Verwijder ongewenste volumes
- Verwijder ongebruikte beelden
- 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:
- Docker info
- om de huidige Docker Storage-stuurprogramma
- 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.
te controleren
- 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.
- Dit is om de beschikbare bestandssystemen op de machine en het pad te controleren waar ze zijn gemonteerd.
- MKDIR / APPS / NEWDOCKER / DOCKER
- CHMOD -R 777 / APPS / NIEUWDOCKER / DOCKER
- Werk Docker.Serive-bestand bij op Linux die zich bevindt onder: / usr / lib / systemd / systeem
- vi /usr/lib/systemD/system/docker.service
- 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
- 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
- rm -rf /var/lib/docker (alle bestaande docker-gegevens worden verwijderd)
- systemctl stop docker
- 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.
- systemctl daemon-reload
- systemctl start docker
- docker-info
- Bekijk de beschikbare dataruimte: 62,15 GB na overstappen op docker naar nieuw bestandssysteem.
- 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 prune
uit. 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.mems
en cpuset.cpus
niet 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_children
in 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.mems
en cpuset.cpus
van 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 import
doet of een nieuwe afbeelding toevoegt, wordt de afbeelding gekopieerd naar de /mnt/sda1
die 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 -H
uit 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
- voer alle systeemsnoeiopdrachten uit die anderen hebben gezegd.
df -H
, hoeveel ruimte is er nog?- 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. - verwijder bestanden of verplaats ze van het systeem.
Optie 2: krijg meer ruimte
- 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 df
uitgevoerd om erachter te komen welk onderdeel meer ruimte in beslag neemt, en vervolgens heb ik de docker system prune -a
uitgevoerd 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 prune
de 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.