Próbuję skonfigurować Docker Machine za pomocą Docker Compose.
Scenariusz 1 (bez Docker Machine)
Jeśli uruchomię docker-compose up -d
bez Docker Machine, utworzy moje 3 połączone kontenery zgodnie z zamiarem (nginx + mongodb + nodejs).
Scenariusz 2 (z Docker Machine)
Następnie tworzę maszynę wirtualną za pomocą Docker Machine i mówię Dockerowi, aby rozmawiał z tą maszyną eval $(docker-machine env streambacker-dev)
.
W tym momencie, jeśli ssh do mojej maszyny dokującej i uruchomię df -h
, otrzymuję:
Jeśli następnie uruchomię docker-compose up -d
, podczas pobierania ostatniego kontenera pojawia się błąd „Brak miejsca na urządzeniu” .
„tmpfs” wydaje się być rzeczywiście trochę zapełniony po tym:
Zaznaczenie opcji --virtualbox-disk-size pokazuje, że domyślnie jest to 20000 MB, co, jak sądzę, widzimy jako „/ dev / sda1” na obu obrazach. Dlaczego więc kontenery zapełniają „tmpfs” n i czym dokładnie jest „tmpfs”? Czy jest to tymczasowy katalog pobierania? Jak mogę uzyskać więcej miejsca na moje kontenery?
Dzięki!
Aby uzyskać informacje, używam Docker Machine 0.4.0-rc2 i Docker Compose 1.3.2 .
źródło
tmpfs
ma z tym nic wspólnego--virtualbox-disk-size
. Jest to system plików (jak dysk RAM) zamontowany w pamięci i nic nie ma dostępu do twojego dysku.docker rmi $(docker images -f dangling=true -q)
idocker volume rm $(docker volume ls -f dangling=true -q)
Odpowiedzi:
Jak wspomniano powyżej,
tmpfs
nie ma z tym nic wspólnego--virtualbox-disk-size
. Wygląda na to, że boot2docker montuje siętmpfs
w pamięci, więc musisz poświęcić więcej pamięci dla maszyny wirtualnej virtualbox. Możesz to zrobić, określając--virtualbox-memory
parametr.Wartości domyślne:
Z
--virtualbox-memory
ustawionym na8096
źródło
Miałem ten sam błąd (
[ERROR] InnoDB: Error number 28 means 'No space left on device'
) i rozwiązałem go w ten sposób:1. Usuń osierocone woluminy w Docker, możesz użyć wbudowanego polecenia woluminu docker. Wbudowane polecenie usuwa również każdy katalog w / var / lib / docker / volume, który nie jest woluminem, więc upewnij się, że nie umieścił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:
Wymień wszystkie tomy:
2. Rozważ także usunięcie wszystkich nieużywanych obrazów.
Najpierw pozbądź się
<none>
obrazów (te są czasami generowane podczas budowania obrazu i jeśli z jakiegoś powodu budowanie obrazu zostało przerwane, pozostają tam).oto ładny skrypt, którego używam do ich usuwania
Następnie, jeśli używasz Docker Compose do tworzenia obrazów lokalnie dla każdego projektu. Otrzymasz wiele obrazów, zwykle o nazwach takich jak twój folder (na przykład, jeśli folder projektu o nazwie Hello, znajdziesz nazwę obrazów
Hello_blablabla
). więc rozważ także 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 rmi $(docker images | grep '^<none>' | awk '{print $3}')
. Usunięcie zatrzymanych kontenerów można wykonać wdocker rm $(docker ps -qa --no-trunc --filter "status=exited")
sposób opisany tutaj: stackoverflow.com/a/32723127/619659 .docker images | grep "^<none>" | xargs docker rmi
.docker volume prune
Jeśli używasz Docker Community Edition:
Jeśli używasz boot2docker (docker-machine), wyczyść woluminy, które są osierocone:
Wyczyść nieużywane obrazy:
źródło
docker system prune
pomógł midocker system prune
ftwdocker volume prune
tylko w przypadku woluminów przycinanie systemu nie usunie wiszących woluminów.docker rmi $(docker images -q)
. Dodaj,--force
jeśli musisz, gdy pomija kilka warstw zawartych w wielu kontenerach.A. USUŃ NIEUŻYWANE OBRAZY
Używając poleceń docker rm lub docker rmi, możesz usunąć obrazy, których nie potrzebujesz. Właściwie istnieje obraz, który pomaga w tym zadaniu (martin / docker-cleanup-volume). Podstawą jest rozpoczęcie selekcji z listy obrazów i kontenerów:
B. ZMIENIĆ DESCRIPTOR JSON DOCKER
wspomina się o tym na niektórych forach. Chodzi o to, aby zwiększyć deskryptor znajdujący się w ~ / .docker / machine / machines / default / config.json. Wydaje się, że parametr to DiskSize, ale nie wiem, czy działa w innych systemach operacyjnych (nie w systemie Windows).
C. ZMIANA ROZMIARU LINUX:
w systemie operacyjnym Windows maszyna docker lub boot2docker jest w rzeczywistości maszyną wirtualną virtualbox, a następnie możesz postępować zgodnie z procedurą zmiany rozmiaru dysku. Uważaj, aby wykonać kopię zapasową plików. Ogólna procedura polega na zmianie rozmiaru w virtualbox, a następnie użyciu narzędzia o nazwie gpartd do modyfikowania przestrzeni postrzeganej przez Linuksa w jego partycjach. Poniżej znajdują się odnośniki do tej procedury:
D. ODTWÓRZ DOCKER-MACHINE / BOOT2DOCKER
Chodzi o to, aby odtworzyć domyślną maszynę dokującą. Poniższe polecenia mogą Cię zilustrować. Zwróć uwagę, że podczas ponownego tworzenia boot2dockera utracisz poprzednie pobrane obrazy dockera.
następnie możesz przejść do wirtualnego pudełka i zobaczyć przestrzeń boot2docker za pomocą polecenia "df -h"
źródło
Na docker osx / mogłem nacisnąć przycisk [ Przenieś obraz dysku ] i pomyślnie przeniosłem Docker.qcow2 (prawdopodobnie zawierający kontenery / obrazy)
początkowo - po uruchomieniu maszyn - nadal otrzymywałem komunikat o błędzie Brak miejsca na urządzeniu, ale wkrótce ustąpił.
źródło
Napotkałem ten problem i nie mogłem dodać dodatkowego miejsca za pomocą interfejsu Docker UI dla komputerów Mac, zainstalowałem docker z homebrew i uruchomiłem następujące polecenie podczas tworzenia mojego komputera:
docker-machine create --driver virtualbox --virtualbox-memory "2048" --virtualbox-disk-size "40000" default
to dodaje dwukrotnie więcej miejsca na pamięć i rozmiar dysku do wirtualnej skrzynki, którą miałem wcześniej i możesz dodać tutaj rozmiar ustawień, który potrzebujesz, według własnego uznania
źródło