Zainstalowałem dokera na maszynie Debian 7 w następujący sposób
$ 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
Po tym, jak po raz pierwszy spróbowałem utworzyć obraz, wystąpił błąd z następującym błędem
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"
Oto informacje o dokerze
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
Jak mogę zwiększyć pamięć? Gdzie są przechowywane konfiguracje systemu?
Z sugestii Kal:
Kiedy pozbyłem się wszystkich obrazów i kontenerów, zwolniło to trochę miejsca, a kompilacja obrazu działała dłużej, zanim zakończyła się tym samym błędem. Pytanie brzmi: do której przestrzeni to odnosi się i jak ją skonfigurować?
df -ih
Odpowiedzi:
Miałem ten sam błąd i rozwiązałem go w ten sposób:
1. Usuń osierocone woluminy w Dockerze, możesz użyć wbudowanego polecenia woluminu dokera. Wbudowane polecenie usuwa również każdy katalog w / var / lib / docker / woluminach, który nie jest woluminem, więc upewnij się, że nie wstawiłeś tam niczego, co chcesz zapisać.
Ostrzeżenie, bądź bardzo ostrożny, jeśli masz jakieś dane, które chcesz zachować
Sprzątać:
Dodatkowe polecenia:
Lista wiszących woluminów:
Wyświetl wszystkie tomy:
2) Rozważ również usunięcie wszystkich nieużywanych obrazów.
Najpierw pozbądź się
<none>
obrazów (czasami są one generowane podczas budowania obrazu i jeśli z jakiegoś powodu tworzenie obrazu zostało przerwane, pozostają tam).oto fajny skrypt, którego używam do ich usunięcia
Następnie, jeśli używasz Docker Compose do tworzenia obrazów lokalnie dla każdego projektu. Skończysz z wieloma obrazami zwykle o nazwie tak jak twój folder (na przykład jeśli folder projektu o nazwie Witaj, znajdziesz nazwę zdjęć
Hello_blablabla
). więc rozważ również usunięcie wszystkich tych obrazówmożesz edytować powyższy skrypt, aby je usunąć lub usunąć ręcznie za pomocą
docker rmi {image-name}
źródło
docker images -qf dangling=true
i oczywiście usuń je za pomocądocker rmi $(docker images -qf dangling=true)
.AKTUALIZACJA
Poniższe polecenia stały się hackami, gdy Docker stał się bardziej rozwinięty. Obecna najlepsza praktyka to
Spowoduje to usunięcie:
Jak poniżej, to jest nuklearne.
Aby wyczyścić system, najpierw usuń pojemniki
następnie usuń obrazy
Jest to oczywiście kwestia nuklearna i usunie wszystkie pojemniki i wszystkie obrazy. Możesz je usunąć pojedynczo za pomocą
docker rm #CONTAINER_ID#
idocker rmi #IMAGE_ID
.źródło
df -ih
. Aby zdiagnozować bardziej chirurgicznie, wprowadź,ncdu
a następnie naciśnij c, aby zliczyć liczbę plików i C, aby posortować według liczby plików, aby uzyskać przybliżone oszacowanie zużycia wszystkich i-węzłów. Jeśli problem rzeczywiście dotyczy dokera, katalogi wykorzystujące najwięcej i-węzłów natychmiast go zauważą.docker system prune
Sprawdź, czy masz wolne miejsce w / var, ponieważ Docker domyślnie przechowuje pliki obrazów (w / var / lib / docker).
Najpierw posprzątaj rzeczy za pomocą,
docker ps -a
aby wyświetlić listę wszystkich pojemników (w tym zatrzymanych) idocker rm
usunąć je; następnie użyj,docker images
aby wyświetlić listę wszystkich zapisanych obrazów idocker rmi
je usunąć.Następnie zmień miejsce przechowywania za pomocą opcji -g na demonie dokera lub edytując
/etc/default/docker
i dodając-g
opcję doDOCKER_OPTS
.-g
określa lokalizację „środowiska wykonawczego Docker”, które jest w zasadzie wszystkim, co Docker tworzy podczas budowania obrazów i uruchamiania kontenerów. Wybierz lokalizację z dużą ilością miejsca, ponieważ używane miejsce na dysku będzie z czasem rosło. Jeśli edytujesz/etc/default/docker
, musisz ponownie uruchomić demona dokera, aby zmiana zaczęła obowiązywać.Teraz powinieneś być w stanie utworzyć nowy obraz (lub pobrać go z Docker Hub) i powinieneś zobaczyć kilka plików tworzonych w katalogu określonym opcją -g.
źródło
docker ps -a
do wyświetlania wszystkich kontenerów (w tym opuszczonych), a następniedocker rm
do ich usunięcia. Użyj,docker images
aby wyświetlić listę wszystkich zdjęć, a następniedocker rmi
je usunąć. Mam nadzieję, że to powinno wszystko wyczyścić (lub większość rzeczy).Jak już wspomniano
pomaga, ale z Dockerem 17.06.1 i nowszymi bez przycinania nieużywanych woluminów. Od wersji Docker 17.06.1 następujące polecenie również przycina woluminy:
Z dokumentacji Docker: https://docs.docker.com/config/pruning/
Jeśli chcesz przyciąć woluminy i zachować obrazy i kontenery:
źródło
docker volume prune
pomógł mi dzisiaj, kiedy wszystkie inne rozwiązania tutaj przestały działać.Jeśli jest to tylko instalacja testowa Dockera (tj. Nieprodukcyjna), a nie obchodzi Cię czyszczenie nuklearne, możesz:
wyczyść wszystkie pojemniki:
docker ps -a | sed '1 d' | awk '{print $1}' | xargs -L1 docker rm
wyczyść wszystkie obrazy:
docker images -a | sed '1 d' | awk '{print $3}' | xargs -L1 docker rmi -f
Ponownie używam tego w moich instancjach ec2 podczas opracowywania Dockera, a nie na poważnej kontroli jakości lub ścieżce produkcyjnej. Wspaniałą rzeczą jest to, że jeśli masz plik (i) Docker, łatwo go odbudować i lub
docker pull
.źródło
docker images -a | sed '1 d' | awk '{print $3}' | xargs docker rmi -f
. Wersja OS X BSDxargs
obsługuje tę-L
opcję, w przeciwieństwie do wersji boot2docker.docker ps -a -q
itp., Aby uniknąć manipulacji tekstem, tj.docker rm $(docker ps -a -q); docker rmi -f $(docker images -a -q)
Powinieneś załatwić sprawęaby usunąć wszystkie nieużywane kontenery, woluminy, sieci i obrazy jednocześnie ( https://docs.docker.com/engine/reference/commandline/system_prune/#related-commands ):
jeśli to nie wystarczy, najpierw można usunąć działające kontenery:
zwiększenie / var / lib / docker lub użycie innej lokalizacji z większą ilością miejsca jest również dobrą alternatywą, aby pozbyć się tego błędu (zobacz Jak zmienić katalog instalacyjny obrazu dokera? )
źródło
docker system prune
nie usuwa woluminów.docker system prune -a -f --volumes
usunie woluminy.Docker na komputery Mac
Tak
docker system prune
idocker system prune --volumes
zasugerowałem w innych odpowiedziach za każdym razem zwalniając trochę miejsca, ale ostatecznie za każdym razem, gdy coś uruchomiłem, pojawiał się błąd.Tym, co faktycznie rozwiązało problem z rootem, było usunięcie
Docker.raw
pliku, którego Docker dla komputerów Mac używa do przechowywania, i zrestartowanie go.Aby znaleźć ten plik, otwórz Docker na Maca i przejdź do *
W nowszych wersjach Docker na komputery Mac ** pokazuje rzeczywisty rozmiar tego pliku na dysku w interfejsie użytkownika, a także jego maksymalny przydzielony rozmiar. Prawdopodobnie zobaczysz, że jest ogromny. Na przykład na moim komputerze było to 41 GB !
Usunąłem
Docker.raw
, ponownie uruchomiłem Docker na Maca, a plik został automatycznie utworzony ponownie i wrócił do 0 GB .Wszystko działało tak jak wcześniej , choć oczywiście straciłem pamięć podręczną Dockera. Zgodnie z oczekiwaniami, po uruchomieniu kilku poleceń Dockera plik zaczął się ponownie wypełniać kilkoma GB rzeczy, ale nigdzie blisko 41 GB .
Aktualizacja
Kilka miesięcy później mój
Docker.raw
znów się napełnił do podobnego rozmiaru. Ta metoda zadziałała, ale musi się powtarzać co kilka miesięcy. Dla mnie to w porządku.Uwaga na temat tego, dlaczego to działa - muszę założyć, że jest to błąd w Docker na Maca. Wygląda na to, że powinien
docker system prune
/docker system prune --volumes
powinien całkowicie wyczyścić zawartość tego pliku, ale wygląda na to, że plik gromadzi inne rzeczy, których nie można usunąć za pomocą tych poleceń. W każdym razie usunięcie go ręcznie rozwiązuje problem!źródło
Docker pozostawia wiszące wokół zdjęcia, które mogą zająć miejsce. Aby wyczyścić po Docker, uruchom następujące czynności:
lub ze starszymi wersjami Dockera:
Spowoduje to usunięcie opuszczonych i wiszących obrazów, co, miejmy nadzieję, wyczyści przestrzeń urządzenia.
źródło
docker rmi $(docker images -f "dangling=true" -q)
źródło
możesz także użyć:
lub tylko dla tomów:
źródło
W moim przypadku instalacja Ubuntu-server 18.04.1 [z jakiegoś dziwnego powodu] stworzyła wolumin logiczny LVM o wielkości zaledwie 4 GB zamiast 750 GB. Dlatego podczas ciągnięcia obrazów pojawia się błąd „brak miejsca na urządzeniu”. Poprawka jest prosta:
źródło
Ten problem również napotkałem na maszynie RHEL. Nigdzie nie znalazłem żadnego rozwiązania apt na przepełnieniu stosu i społeczności dokerów-hubów. Jeśli napotykasz ten problem, nawet po wykonaniu poniższego polecenia:
przycinanie systemu dokerów - wszystkie
Rozwiązanie, które w końcu zadziałało:
źródło
Wyczyść Docker za pomocą następującego polecenia:
źródło
Twoje grupy mają
cpuset
włączony kontroler. Ten kontroler jest najbardziej użyteczny w środowisku NUMA, gdzie pozwala dokładnie określić, który procesor / bank pamięci mogą być uruchamiane twoje zadania.Domyślnie obowiązkowe
cpuset.mems
icpuset.cpus
nie są ustawione, co oznacza, że „nie ma już miejsca” na twoje zadanie, stąd błąd.Najłatwiejszym sposobem, aby to naprawić, jest włączenie
cgroup.clone_children
1 w głównej grupie cg. W twoim przypadku tak powinno byćZasadniczo poinstruuje system, aby automatycznie inicjował kontener
cpuset.mems
icpuset.cpus
od jego nadrzędnej grupy.źródło
echo 0 > /sys/fs/cgroup/cpuset/system.slice/cpuset.mems
Jeśli używasz obrazu boot2docker za pośrednictwem Docker Toolkit, problem wynika z faktu, że na maszynie wirtualnej boot2docker zabrakło miejsca.
Po wykonaniu
docker import
lub dodaniu nowego obrazu obraz zostanie skopiowany do tego,/mnt/sda1
który mógł być pełny.Jednym ze sposobów sprawdzenia, ile miejsca masz na obrazie, jest ssh do vm i uruchomienie
df -h
i sprawdzenie pozostałej przestrzeni w / mnt / sda1Komenda ssh to
docker-machine ssh default
Gdy masz pewność, że rzeczywiście jest to problem z miejscem, możesz albo wyczyścić zgodnie z instrukcjami w niektórych odpowiedziach na to pytanie, albo możesz zmienić rozmiar samego obrazu boot2docker, zwiększając przestrzeń na
/mnt/sda1
Możesz wykonać instrukcje tutaj, aby zmienić rozmiar obrazu https://gist.github.com/joost/a7cfa7b741d9d39c1307
źródło
Jeśli używasz Docker Desktop, możesz zwiększyć rozmiar obrazu dysku w Ustawieniach zaawansowanych , przechodząc do Preferencji Dockera .
Oto zrzut ekranu z systemu macOS:
źródło
Może to być spowodowane domyślnym miejscem do przechowywania ustawionym na 40 GB (domyślna ścieżka, / var / lib / docker)
możesz zmienić wolumin pamięci, aby wskazywał inną ścieżkę
DOCKER_STORAGE_OPTIONS = '- sterownik pamięci = nakładka --graph = CUSTOM_PATH'
jeśli uruchomisz informacje o oknie dokowanym (powinien pokazać sterownik pamięci jako nakładkę)
źródło
Wydaje się, że może to nastąpić na kilka sposobów. Problemem było to, że obraz dysku dokującego osiągnął maksymalny rozmiar (Docker Whale -> Preferencje -> Dysk, jeśli chcesz zobaczyć, jaki rozmiar jest w OSX).
Przekroczyłem limit i byłem gotowy do startu. Jestem pewien, że oczyszczenie nieużywanych obrazów również by działało.
źródło
Uruchamiam poniższe polecenia.
Nie ma potrzeby późniejszej odbudowy zdjęć.
Usuwają one wychodzące / wiszące pojemniki i wiszące woluminy.
źródło
Dla mnie
docker system prune
załatwił sprawę. Mam Mac OS.źródło
docker volume ls
nic nie zwracało, więc wydawało się, że pamięć była w większości używana przez pamięci podręczne i wiszące obrazy.To zadziałało dla mnie
wydaje się być lepszą opcją w najnowszej wersji
źródło