Chcę mieć możliwość sprawdzenia zawartości kontenera Docker (tylko do odczytu). Eleganckim sposobem na zrobienie tego byłoby zamontowanie zawartości kontenera w katalogu. Mówię o zamontowaniu zawartości kontenera na hoście, a nie o zamontowaniu folderu na hoście w kontenerze.
Widzę, że w Dockerze są teraz dwa sterowniki pamięci: aufs i btrfs. Moja własna instalacja Docker używa btrfs, a przeglądanie do / var / lib / docker / btrfs / subvolumes pokazuje mi jeden katalog na kontener Docker w systemie. Jest to jednak szczegół implementacji Dockera i zamontowanie go w innym katalogu jest błędem.
Czy istnieje odpowiedni sposób, aby to zrobić, czy też muszę załatać Dockera, aby obsługiwał tego rodzaju mocowania?
linux
filesystems
lxc
docker
dflemstr
źródło
źródło
Odpowiedzi:
Spójrz na
docker export
.Aby szybko wyświetlić listę plików w kontenerze:
Eksportować:
Lub obejrzeć plik:
Docker 1.8 obsługuje cp :
https://docs.docker.com/reference/commandline/cp/
aktualizacja: po uruchomieniu należy ssh na maszynę dokującą.
źródło
tar x PATH-IN-CONTAINER
, wyodrębni tylko te pliki, których potrzebujesz.tar
archiwum jest nadal tworzone w demonie Docker, a utworzenie zajmuje wiele minut ...docker export ubuntu|tar -t|grep etc/network
zajmuje mi to 3 sekundy.ubuntu
obraz jest naprawdę mały ...Za pomocą zatwierdzenia dokera można zachować bieżący stan kontenera na nowym obrazie i uruchomić interaktywny kontener z tego obrazu, aby sprawdzić zawartość.
Z dokumentacji:
Mam nadzieję że to pomoże.
źródło
Możesz użyć nsenter do uruchomienia programu inspekcyjnego (który prawdopodobnie musi być już zawarty w kontenerze) wewnątrz kontenera / przestrzeni nazw. Ale aby zamontować system plików kontenera, jak widać w nim, musisz zamontować oryginalny obraz i wszystkie warstwy, jeśli jest aufs, lub równoważne działanie dla mapera urządzeń, btrfs i innych (przyszłych) silników pamięci, różniących się w każdym przypadku. Prawdopodobnie bardziej efektywne byłoby pozwolenie dokerowi wykonać pracę za ciebie, dokładnie tak, jak powinno, i użyć nsenter do przeprowadzenia kontroli wewnątrz kontenera.
Istnieją inne podejścia. okno dokowane diff pokaże, jakie pliki zmieniły się w tym kontenerze, jeśli chcesz zobaczyć, co zmieniło się zamiast tego, co było w oryginalnym obrazie.
W przypadku danych, które muszą być trwałe i możliwe do sprawdzenia, prawdopodobnie lepszym rozwiązaniem byłoby umieszczenie ich w woluminie w kontenerze i zamontowanie go w prawdziwym systemie plików, w czystym kontenerze danych lub w tym samym kontenerze, ale że możesz uruchomić inny kontener za pomocą programu inspekcyjnego instalującego z niego te woluminy.
źródło
EDYCJA: Wypróbowałem poniższe rozwiązanie i niestety nie działało to dla mnie dobrze w praktyce. Zainstalowany system plików nie odzwierciedlał dokładnie systemu plików kontenera (nawet z
cache=no
). Nie jestem pewien, czy jest to podstawowy problem, czy też robię coś złego.Możesz zainstalować sshd na obrazie dokera i użyć go
docker exec
do uruchomienia usługi ssh (/usr/sbin/sshd -D
) na kontenerze dokera (zwróć uwagę, że port SSH 22 kontenera dokowania musi być odsłonięty).Następnie użyj przycisku,
docker cp
aby skopiować swój publiczny klucz ssh do/root/.ssh/authorized_keys
katalogu kontenera dokowanego.Na koniec użyj,
docker inspect
aby znaleźć adres IP kontenera i zamontować system plików kontenera za pomocąTrzeba by napisać skrypt, aby ten działał wygodnie w praktyce.
źródło