Nie mogę znaleźć sposobu na przeniesienie platformy Docker obsługującej kontenery z jednego hosta na inny.
Czy istnieje sposób, w jaki mogę przesłać moje kontenery do repozytoriów, tak jak robimy to w przypadku obrazów? Obecnie nie używam woluminów danych do przechowywania danych powiązanych z aplikacjami działającymi w kontenerach. Dlatego niektóre dane znajdują się w kontenerach, które chcę zachować przed przeprojektowaniem konfiguracji.
docker
containers
docker-registry
Dinesh Reddy
źródło
źródło
docker save
służy do zapisywania obrazów, a nie kontenerów. docs.docker.com/engine/reference/commandline/saveOdpowiedzi:
Nie można przenieść uruchomionego kontenera Dockera z jednego hosta na inny.
Możesz zatwierdzić zmiany w swoim kontenerze do obrazu za pomocą
docker commit
, przenieść obraz na nowy host, a następnie rozpocząć nowy kontener za pomocądocker run
. Pozwoli to zachować wszystkie dane, które aplikacja utworzyła w kontenerze.Uwaga: nie zachowuje danych przechowywanych w woluminach; musisz ręcznie przenieść woluminy danych na nowy host.
źródło
docker stop x
; 2. dokonywać zmiandocker commit -p x x
; 3. zapisać kontener do obrazudocker save -o x x
; 4. przenieś plik x na nowy host i na nowym hoście załaduj nowy obrazdokcer load -i x
(jeśli uruchomiłeś kontener z-v
opcją, będziesz musiał również przenieść te pliki na nowy host); 5. Uruchom to zdjęcie zdocker run (-v is required to mount these files if needed)
Alternatywnie, jeśli nie chcesz wypychać do repozytorium:
Wyeksportuj kontener do tarballa
Przenieś archiwum na nową maszynę
Zaimportuj go z powrotem
źródło
To, co w końcu zadziałało dla mnie, po wielu zagmatwanych podręcznikach i mylących samouczkach, ponieważ Docker jest oczywiście w momencie, gdy piszę, na pierwszy rzut oka zawyżonych oczekiwań , to:
docker save image_name > image_name.tar
cat image_name.tar | docker load
Eksportowanie i importowanie, zgodnie z propozycją w innych odpowiedziach, nie powoduje eksportu portów i zmiennych, które mogą być wymagane do działania kontenera. I możesz skończyć z takimi rzeczami, jak „Nie określono polecenia” itp. Kiedy spróbujesz załadować go na innym komputerze.
Tak więc różnica między zapisaniem a eksportem polega na tym, że polecenie save zapisuje cały obraz z historią i metadanymi, podczas gdy polecenie eksportu eksportuje tylko strukturę plików (bez historii i metadanych).
Nie trzeba dodawać, że jeśli masz już te porty zajęte przez hiper-visor Dockera, który importujesz, przez jakiś inny kontener Dockera, skończysz w konflikcie i będziesz musiał ponownie skonfigurować ujawnione porty.
źródło
Z dokumentacji Dockera:
źródło
Użyj tego skryptu: https://github.com/ricardobranco777/docker-volumes.sh
To robi zachować dane w tomach.
Przykładowe użycie:
źródło
Wypróbowałem wiele rozwiązań, a to działa dla mnie:
1. zatwierdź / zapisz kontener na nowy obraz:
# docker stop
# docker commit CONTAINER_NAME
# docker save --output IMAGE_NAME.tar IMAGE_NAME: TAG
ps: „Nasz kontener CONTAINER_NAME ma zamontowany wolumen w '/ var / home'” (musisz sprawdzić swój kontener, aby określić ścieżkę wolumenu: # docker inspect CONTAINER_NAME)
# mkdir backup
# docker run --rm --volumes-from CONTAINER_NAME -v $ {pwd} / backup: / backup ubuntu bash -c “cd / var / home && tar cvf /backup/volume_backup.tar.”
Teraz, gdy spojrzysz na $ {pwd} / backup, znajdziesz nasz wolumin w formacie tar.
Do tej pory mamy obraz naszego kontenera „IMAGE_NAME.tar” i jego objętość „volume_backup.tar”.
Teraz możesz odtworzyć ten sam stary kontener na nowym hoście.
źródło