Używałem Dockera w stary sposób, z kontenerem objętości:
docker run -d --name jenkins-data jenkins:tag echo "data-only container for Jenkins"
Ale teraz przeszedłem na nowy sposób, tworząc nazwany wolumin:
docker volume create --name my-jenkins-volume
Powiązałem ten nowy tom z nowym kontenerem Jenkinsa. Jedyne, co mi zostało, to folder, w którym mam /var/jenkins_home
mój poprzedni kontener Jenkins. (używającdocker cp
) Teraz chcę wypełnić mój nowy nazwany wolumin zawartością tego folderu.
Czy mogę po prostu skopiować zawartość tego folderu do /var/lib/jenkins/volume/my-jenkins-volume/_data
?
docker volume inspect my-jenkins-volume --format '{{.Mountpoint}}'
programowo pobierać jej fizyczną lokalizację. Jednak nadal nie wydaje się to świetnym pomysłem.docker cp
a następnie usunąć./var/lib/docker/volumes/my-jenkins-volume/_data
podczas korzystania z Docker for Mac nie działa, ponieważ pliki są przechowywane w maszynie wirtualnej xhyve . Zobacz forums.docker.com/t/var-lib-docker-does-not-exist-on-host/18314Zaakceptowaną odpowiedź możesz zredukować do jednej linii używając np
źródło
-v `pwd`:/src
oznacza to, że polecenie działa na hoście? (Jak na przykład może mapować hosta,pwd
jeśli jest to inny komputer? - nie może.) Jeśli polecenie docker nie jest uruchomione na hoście, to nie działa. Uważam, że właśnie dlatego mamy docker cp. Wygląda na to, że nie jest to „droga” dla dockera - to tylko specjalny przypadek, który działa tylko wtedy, gdy polecenie docker jest uruchomione na hoście. Czy dobrze rozumiem?pwd
musi rozwiązać się do pliku na komputerze hosta. Z dokumentacji montowania Dockera: "W przypadku montowań bind, pierwsze pole to ścieżka do pliku lub katalogu na maszynie hosta."pwd
który nawet nie musi istnieć w zdalnym hostem. Zamiast tego rozwiązanie autorstwa Dmytro Melnychuka (create + cp + rm) kopiuje te lokalne do kontenera bez względu na to, gdzie jest uruchomione.Nie musisz uruchamiać jakiegoś kontenera, aby dodać dane do już istniejącego woluminu nazwanego, po prostu utwórz kontener i skopiuj tam dane:
źródło
hello-world
i to też działa.busybox
wynosi 1,22 MB. Zamiast tegohello-world
jest 13,3kB. Pytanie brzmi: w ten sam sposób, w jaki możemy zrobić plik Dockerfile FROM zera, czy moglibyśmy zrobić „tworzenie kontenera dockera” z „niczym” jako obrazem, ponieważ chcemy tylko „zamontować” wolumin i nigdy nie uruchamiać kontenera?docker cp
todocker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
Oto kroki kopiowania zawartości ~ / data do woluminu docker o nazwie my-vol
Krok 1. Dołącz wolumin do „tymczasowego” pojemnika. W tym celu uruchom w terminalu to polecenie:
docker run --rm -it --name alpine --mount type=volume,source=my-vol,target=/data alpine
Krok 2. Skopiuj zawartość ~ / data do my-vol . W tym celu uruchom to polecenie w nowym oknie terminala:
cd ~/data docker cp . alpine:/data
Spowoduje to skopiowanie zawartości ~ / data do woluminu my-vol . Po skopiowaniu wyjdź z tymczasowego pojemnika.
źródło