Podczas korzystania z obrazów dokowanych z rejestrów często muszę widzieć woluminy utworzone przez kontenery obrazu.
Uwaga: używam dokera w wersji 1.3.2 na Red Hat 7.
Przykład
postgres
Oficjalny obraz z Docker Rejestru ma objętość skonfigurowaną do pojemników na /var/lib/postgresql/data
.
Jakie jest najbardziej zwięzłe polecenie, aby pokazać objętość /var/lib/postgresql/data
w postgres
pojemniku?
Odpowiedzi:
Użyj,
docker ps
aby uzyskać identyfikator kontenera.Następnie
docker inspect -f '{{ .Mounts }}' containerid
Przykład:
Terminal 1
zacisk 2
Wyjście
najwyraźniej wynika z użycia języka Go do implementacji narzędzi poleceń dokera.
docker inspect
Polecenia bez-f format
jest dość rozwlekły. Ponieważ jest to JSON, możesz przesłać go do Pythona lub nodejs i wyodrębnić wszystko, czego potrzebujesz.docker history <image name>
pokaże warstwy upieczone na obrazie. Niestetydocker history
wydaje się być zakłopotany jego formatowaniem i brakiem opcji wyboru tego, co ma być wyświetlane.Możesz wybrać krótkie i pełne formaty, poprzez flagę --no-trunc.
Oto pełny przykład.
źródło
Z dokerem 1.10 masz teraz nowe polecenia dla kontenerów woluminów danych.
(w przypadku zwykłych kontenerów, patrz następna sekcja, dla dokera 1.8+):
docker volume ls
docker volume inspect
Z dokerem 1.8.1 (sierpień 2015), a
docker inspect -f '{{ .Volumes }}' containerid
byłoby puste!Teraz musisz to sprawdzić
Mounts
, która jest listą zamontowanych ścieżek, takich jak:Jeśli chcesz ścieżkę pierwszego montowania (na przykład), byłoby to (używając indeksu 0):
Jako Mike Mitterer komentuje poniżej :
Albo, jak skomentował przez Mitja , użyj
jq
polecenia .źródło
jq
pakiet pod Ubuntu, a następnie po prostu przesłać do niego:docker inspect -f '{{ json .Mounts }}' containerid | jq
Pokaż nazwy i miejsca docelowe punktów instalacji woluminów używanych przez kontener:
Jest to zgodne z Docker 1.13.
źródło
Właśnie go przeszukałem i znalazłem własną odpowiedź :) Moja pamięć w dzisiejszych czasach ... A dla tych, którzy o tym nie wiedzą, linia poleceń jest fajnym miejscem do znalezienia i opublikowania tych fragmentów.
Wyświetl woluminy dokerów według kontenerów.
Przykładowe dane wyjściowe.
źródło
Możesz uzyskać informacje o tym, które woluminy zostały specjalnie upieczone w kontenerze, sprawdzając kontener i sprawdzając dane wyjściowe JSON i porównując kilka pól. Po uruchomieniu
docker inspect myContainer
, toVolumes
iVolumesRW
pola daje informacje o ALL od wielkości montowane wewnątrz kontenera, w tym tomy montowane zarówno w Dockerfile zVOLUME
dyrektywą, a w wierszu polecenia zdocker run -v
poleceniem. Można jednak wyizolować, które woluminy zostały zamontowane w kontenerze za pomocądocker run -v
polecenia, sprawdzającHostConfig.Binds
pole w danychdocker inspect
wyjściowych JSON. Aby to wyjaśnić,HostConfig.Binds
pole to informuje, które woluminy zostały zamontowane konkretnie w twoimdocker run
poleceniu za pomocą-v
opcja. Więc jeśli odniesiesz to pole doVolumes
pola, będziesz w stanie określić, które woluminy zostały upieczone w pojemniku, korzystając zVOLUME
dyrektyw w Dockerfile.Grep mógłby to osiągnąć w następujący sposób:
I...
I w moim przykładzie widać, że zamontowałem
/var/docker/docker-registry/config
w kontenerze,/registry
używając-v
opcji w moimdocker run
poleceniu, i zamontowałem woluminy/data
i,/config
używającVOLUME
dyrektywy w moim pliku Docker. Kontener nie musi być uruchomiony, aby uzyskać te informacje, ale musi zostać uruchomiony przynajmniej raz, aby wypełnić daneHostConfig
wyjściowe JSONdocker inspect
polecenia.źródło
HostConfig.Binds
i czym się różni od tego, co.Volumes
widać w odpowiedzi z @Paul?.Volumes
wyświetla listę „ścieżek (ciągów) mapowania obiektów wewnątrz kontenera do pustych obiektów” iHostConfig.Binds
opisuje faktyczne powiązanie -montowane woluminy w kontenerze. Wydaje mi się, żeHostConfig.Binds
to właśnie chcesz przeczytać, a.Volumes
chciałbym usłyszeć lepsze uzasadnienie.#docker
o Freenode (główny kanał dokera), a jeśli coś usłyszę, na pewno zaktualizuję tutaj więcej informacji. To bardzo dobre pytanie, które zadałeś tutaj na temat różnicy. Dzięki!HostConfig.Binds
jest wypełniane tylko wtedy, gdy określono ścieżkę hosta woluminu? Na przykład,docker run -d -v /docker-test:/docker-test postgres
w porównaniudocker run -d -v /docker-test postgres
. Wygląda na to, że doktor z jakiegoś powodu obsługuje te dwa przypadki woluminów zupełnie inaczej.W przypadku Docker 1.8 używam:
źródło
jeśli chcesz wyświetlić listę wszystkich nazw kontenerów wraz z odpowiednimi woluminami dołączonymi do każdego kontenera, możesz spróbować:
przykładowe dane wyjściowe:
/ opt_rundeck_1 - nazwa kontenera
[..] - tomy dołączone do konatynatora
źródło
Oto polecenie w jednym wierszu, aby uzyskać informacje o woluminie dla uruchomionych kontenerów:
Dane wyjściowe to:
Wersja Docker:
źródło
Przydatna odmiana dla użytkowników tworzących dokery:
To bardzo starannie wyświetli informacje o analizowanym wolumenie. Przykład z mojego edytora dokerów WordPress:
Dane wyjściowe zawierają po jednym wierszu dla każdego kontenera, wymieniając używane woluminy (i punkty instalacji). Zmień {{.Name}}: {{.Destination}}, aby wyświetlić żądane informacje.
Jeśli chcesz tylko prostą listę woluminów, po jednym w wierszu
Świetnie jest wygenerować listę woluminów do utworzenia kopii zapasowej. Korzystam z tej techniki wraz z Blacklabelops Volumerize do tworzenia kopii zapasowych wszystkich woluminów używanych przez wszystkie kontenery w ramach dokowania. Dokumenty Volumerize nie wzywają go, ale nie trzeba go używać w trwałym kontenerze ani korzystać z wbudowanych funkcji uruchamiania i zatrzymywania usług. Wolę pozostawić krytyczne operacje, takie jak tworzenie kopii zapasowych i kontrola usług, rzeczywistemu użytkownikowi (poza dokerem). Moje kopie zapasowe są uruchamiane przez rzeczywiste konto użytkownika (inne niż dokerujące) i używaj stop-compose docker-stop do zatrzymywania usług, tworzenia kopii zapasowych wszystkich używanych woluminów, a na koniec restartowania docker-compose.
źródło
źródło
Oto moja wersja, aby znaleźć punkty montowania komponowania dokera. Służy do tworzenia kopii zapasowych woluminów.
Jest to połączenie poprzednich rozwiązań.
źródło
Jeśli używasz pwsh (rdzenia PowerShell), możesz spróbować
możesz również zobaczyć nazwę kontenera i wierzchowce, jak poniżej
Ponieważ dane wyjściowe są konwertowane na format json, można uzyskać wszystkie posiadane właściwości.
źródło
Możemy to zrobić bez składni szablonu -f Go:
Pierwsza operacja jq
jq .[]
usuwa{}
opakowanie obiektu .Druga operacja jq zwróci wszystkie elementy montowania.
źródło