Ich habe Docker auf die alte Art und Weise mit einem Volumencontainer verwendet:
docker run -d --name jenkins-data jenkins:tag echo "data-only container for Jenkins"
Aber jetzt habe ich auf die neue Art gewechselt, indem ich ein benanntes Volume erstellt habe:
docker volume create --name my-jenkins-volume
Ich habe diesen neuen Band an einen neuen Jenkins-Container gebunden. Das einzige, was ich noch habe, ist ein Ordner, in dem ich den /var/jenkins_home
meines vorherigen Jenkins-Containers habe. (mit docker cp
) Nun möchte ich mein neues benanntes Volume mit dem Inhalt dieses Ordners füllen.
Kann ich den Inhalt dieses Ordners einfach kopieren /var/lib/jenkins/volume/my-jenkins-volume/_data
?
docker volume inspect my-jenkins-volume --format '{{.Mountpoint}}'
programmgesteuert den physischen Standort ermitteln. Fühlt sich immer noch nicht nach einer großartigen Idee an.docker cp
und dann zu entfernen./var/lib/docker/volumes/my-jenkins-volume/_data
bei Verwendung von Docker für Mac nicht funktioniert, da Dateien in der virtuellen xhyve-Maschine gespeichert sind . Siehe forums.docker.com/t/var-lib-docker-does-not-exist-on-host/18314Sie können die akzeptierte Antwort auf eine Zeile reduzieren, indem Sie z
quelle
-v `pwd`:/src
, dass der Befehl auf dem Host ausgeführt wird? (Wie kann der Host beispielsweise zugeordnet werden,pwd
wenn es sich um einen anderen Computer handelt? - Dies ist nicht möglich.) Wenn der Docker-Befehl nicht auf dem Host ausgeführt wird, funktioniert dies nicht. Ich glaube, deshalb haben wir Docker CP. Dies scheint nicht der richtige Weg für Docker zu sein - es ist nur ein Sonderfall, der nur funktioniert, wenn der Docker-Befehl auf dem Host ausgeführt wird. Verstehe ich richtig?pwd
muss in eine Datei auf dem Host-Computer aufgelöst werden. Aus der Docker-Mount-Dokumentation: "Bei Bindungs-Mounts ist das erste Feld der Pfad zur Datei oder zum Verzeichnis auf dem Host-Computer."pwd
die nicht einmal auf dem Remote-Host vorhanden sein muss. Stattdessen kopiert die Lösung von Dmytro Melnychuk (create + cp + rm) die lokalen in den Container, unabhängig davon, wo sie ausgeführt wird.Sie müssen keinen Container starten, um Daten zu bereits vorhandenen benannten Volumes hinzuzufügen. Erstellen Sie einfach einen Container und kopieren Sie die Daten dorthin:
quelle
hello-world
und es funktioniert auch.busybox
beträgt 1,22 MB. Stattdessenhello-world
ist 13,3kB. Die Frage ist: Genauso wie wir eine Docker-Datei von Grund auf neu erstellen können, können wir auch einen "Docker-Container erstellen" mit "nichts" als Image erstellen, da wir nur das Volume "mounten" und den Container niemals starten möchten?docker cp
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
Hier sind Schritte zum Kopieren des Inhalts von ~ / data auf das Docker-Volume mit dem Namen my-vol
Schritt 1. Befestigen Sie das Volume an einem "temporären" Container. Führen Sie dazu im Terminal diesen Befehl aus:
docker run --rm -it --name alpine --mount type=volume,source=my-vol,target=/data alpine
Schritt 2. Kopieren Sie den Inhalt von ~ / data in my-vol . Führen Sie dazu diese Befehle im neuen Terminalfenster aus:
cd ~/data docker cp . alpine:/data
Dadurch wird der Inhalt von ~ / data in mein vol- Volume kopiert . Nach dem Kopieren verlassen Sie den temporären Container.
quelle