J'utilisais Docker à l'ancienne, avec un conteneur de volume:
docker run -d --name jenkins-data jenkins:tag echo "data-only container for Jenkins"
Mais maintenant, j'ai changé pour la nouvelle façon en créant un volume nommé:
docker volume create --name my-jenkins-volume
J'ai lié ce nouveau volume à un nouveau conteneur Jenkins. La seule chose qui me reste est un dossier dans lequel j'ai le /var/jenkins_home
de mon précédent conteneur jenkins. (en utilisant docker cp
) Maintenant, je veux remplir mon nouveau volume nommé avec le contenu de ce dossier.
Puis-je simplement copier le contenu de ce dossier dans /var/lib/jenkins/volume/my-jenkins-volume/_data
?
docker volume inspect my-jenkins-volume --format '{{.Mountpoint}}'
pour obtenir son emplacement physique par programme. Cela ne me semble toujours pas une bonne idée.docker cp
puis de le supprimer./var/lib/docker/volumes/my-jenkins-volume/_data
lors de l'utilisation de Docker pour Mac ne fonctionne pas car les fichiers sont stockés dans la machine virtuelle xhyve . Voir forums.docker.com/t/var-lib-docker-does-not-exist-on-host/18314Vous pouvez réduire la réponse acceptée à une ligne en utilisant, par exemple
la source
-v `pwd`:/src
n'implique- t-il pas que la commande s'exécute sur l'hôte? (Comment l'hôte peut-il mapperpwd
s'il s'agit d'une machine différente, par exemple? - il ne peut pas.) Si la commande docker ne s'exécute pas sur l'hôte, cela ne fonctionne pas. Je crois que c'est pourquoi nous avons docker cp. Il semble que ce n'est pas "la voie" pour docker - c'est juste un cas spécial qui ne fonctionne que lorsque la commande docker est en cours d'exécution sur l'hôte. Est-ce que je comprends bien?pwd
doit être résolu en un fichier sur la machine hôte. De la documentation de montage de docker: "Dans le cas des montages de liaison, le premier champ est le chemin d'accès au fichier ou au répertoire sur la machine hôte."pwd
ce qui n'a même pas besoin d'exister dans l'hôte distant. Au lieu de cela, la solution de Dmytro Melnychuk (create + cp + rm) copie les locales dans le conteneur, peu importe où elle s'exécute.Vous n'avez pas besoin de démarrer un conteneur pour ajouter des données à un volume nommé déjà existant, créez simplement un conteneur et copiez-y les données:
la source
hello-world
et cela fonctionne également.busybox
est de 1,22 Mo. Au lieu de cela,hello-world
13,3 Ko. La question est la suivante: de la même manière que nous pouvons faire un Dockerfile FROM scratch, pourrions-nous faire un "docker container create" avec "rien" comme image car nous voulons simplement "monter" le volume et ne jamais démarrer le conteneur?docker cp
estdocker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
Voici les étapes pour copier le contenu de ~ / data vers le volume docker nommé my-vol
Étape 1. Fixez le volume à un conteneur «temporaire». Pour cela, exécutez cette commande dans le terminal:
docker run --rm -it --name alpine --mount type=volume,source=my-vol,target=/data alpine
Étape 2. Copiez le contenu de ~ / data dans my-vol . Pour cela, exécutez ces commandes dans une nouvelle fenêtre de terminal:
cd ~/data docker cp . alpine:/data
Cela copiera le contenu de ~ / data dans le volume my-vol . Après la copie, quittez le conteneur temporaire.
la source