J'essaie de créer une solution de sauvegarde et de restauration pour les conteneurs Docker avec lesquels nous travaillons.
J'ai une image de base Docker que j'ai créée, ubuntu:base
et je ne veux pas avoir à la reconstruire à chaque fois avec un fichier Docker pour y ajouter des fichiers.
Je veux créer un script qui s'exécute à partir de la machine hôte et crée un nouveau conteneur à l'aide de l' ubuntu:base
image Docker, puis copie des fichiers dans ce conteneur.
Comment puis-je copier des fichiers de l'hôte vers le conteneur?
docker
docker-container
user3001829
la source
la source
Réponses:
le
cp
commande peut être utilisée pour copier des fichiers.Un fichier spécifique peut être copié dans le conteneur comme:
Un fichier spécifique peut être copié DU conteneur comme:
Pour mettre l'accent,
mycontainer
est un ID de conteneur , pas une image ID d' .Plusieurs fichiers contenus dans le dossier
src
peuvent être copiés dans letarget
dossier en utilisant:Référence: documentation Docker CLI pour
cp
Dans les versions Docker antérieures à la version 1.8, il était uniquement possible de copier des fichiers d'un conteneur vers l'hôte. Pas de l'hôte vers un conteneur.
la source
COPY
préféré par rapport à leADD
cas échéant.docker cp
pour copier du conteneur vers l'hôte fonctionne bien, mais quand l'utiliser pour copier des fichiers de l'hôte vers le conteneur, aucun effet ... quelqu'un sait pourquoi? version docker: Docker version 1.10.3, build cb079f6-Obtenez le nom du conteneur ou l'ID court du conteneur:
Obtenez l'identifiant complet du conteneur:
Copier un fichier:
EXEMPLE:
ou
la source
aufs
qu'un adevicemapper
. Le moyen le plus simple de vérifier le chemin de montage des conteneurs (pendant qu'il est en cours d'exécution) consiste à exécuter la commandemount
./var/lib/docker/aufs/diff/<id>/
/var/lib
pour moi.find / -name docker
n'était pas utile non plus.La manière la plus propre consiste à monter un répertoire hôte sur le conteneur lors du démarrage du conteneur:
la source
docker run -d -p -v /host/path:/mnt --name container_name image_name
docker cp
soit une opération à sens unique!Ce qui suit est une façon assez laide de le faire, mais cela fonctionne.
la source
docker commit `docker ps -l -q` ubuntu-with-file
. Sinon, le changement sera perdu (utilisez le nom de votre choix à la placeubuntu-with-file
)docker exec
fonctionnalité pour travailler avec le conteneur en cours d'exécution:docker exec -it <container_id> bash -c 'cat > /path/to/container/file' < /path/to/host/file/
docker exec -i ...
lieu de-it
, parce qu'il n'y a pas d' ATS lorsque la tuyauterie dans un fichier.tar -c -v -f - /path/to/host/directory | docker exec -i <container-name> bash -c 'tar -x -v --strip-components 1 -f - -C /path/to/container/directory'
Si vous devez le faire sur un conteneur en cours d'exécution, vous pouvez utiliser le docker exec (ajouté en 1.3).
Tout d'abord, recherchez le nom ou l'ID du conteneur:
Dans l'exemple ci-dessus, nous pouvons utiliser
b9b7400ddd8f
ouelated_hodgkin
.Si vous vouliez tout copier
/tmp/somefiles
sur l'hôte/var/www
dans le conteneur:Nous pouvons ensuite exécuter
/bin/bash
dans le conteneur et vérifier que cela a fonctionné:la source
Créez un nouveau dockerfile et utilisez l'image existante comme base.
Construisez ensuite le conteneur:
la source
La solution est donnée ci-dessous,
Depuis le shell Docker,
De l'hôte
Le fichier doit être directement copié à l'emplacement où se trouve le conteneur sur le système de fichiers.
la source
Il existe généralement trois types:
Du conteneur à l'hôte
De l'hôte à un conteneur
D'un récipient à un récipient mélange 1 et 2
la source
Une autre solution pour copier des fichiers dans un conteneur en cours d'exécution utilise tar:
Copie le fichier
foo.sh
dans/tmp
le conteneur.Edit: Supprimez reduntant
-f
, grâce au commentaire de Maarten .la source
-f -
un peu redondant cependant, le comportement par défaut est quand même d'écrire sur stdout.Pour copier un fichier de l'hôte vers le conteneur en cours d'exécution
Basé sur la réponse d'Erik et les commentaires de Mikl et z0r.
la source
Avec Docker 1.8,
docker cp
est capable de copier des fichiers de l'hôte vers le conteneur. Consultez l'article de blog Docker annonçant Docker 1.8: Content Trust, Toolbox et mises à jour de Registry and Orchestration .la source
docker cp foo.txt mycontainer:/foo.txt
Il s'agit d'une réponse directe à la question «Copie de fichiers de l'hôte vers le conteneur Docker» soulevée dans cette question dans le titre.
Essayez
docker cp
. C'est le moyen le plus simple de le faire et fonctionne même sur mon Mac. Usage:Cela copiera le fichier
some-file.txt
dans le répertoire/root
de votre machine hôte dans le conteneur Docker nommésome-docker-container
dans le répertoire/root
. Il est très proche de la syntaxe de copie sécurisée. Et comme indiqué dans le post précédent, vous pouvez l'utiliser inversement. C'est-à-dire que vous copiez également des fichiers du conteneur vers l'hôte.Et avant de télécharger ce post, veuillez saisir
docker cp --help
. La lecture de la documentation peut être très utile, parfois ...Si vous n'aimez pas de cette façon et que vous voulez des volumes de données dans votre conteneur déjà créé et en cours d'exécution, la récréation est votre seule option aujourd'hui. Voir aussi Comment puis-je ajouter un volume à un conteneur Docker existant? .
la source
J'ai essayé la plupart des solutions (votées) ici, mais dans docker 17.09 (en 2018), il n'y a plus de dossier / var / lib / docker / aufs.
Ce simple a
docker cp
résolu cette tâche.Comment obtenir container_name?
Il y a une
NAMES
section. N'utilisez pas aIMAGE
.la source
Pour copier des fichiers / dossiers entre un conteneur et le système de fichiers local, tapez la commande:
Par exemple,
Pour obtenir l'ID contianer, tapez la commande donnée:
Le contenu ci-dessus provient de docker.com .
la source
En supposant que le conteneur est déjà en cours d'exécution, tapez la commande donnée:
Pour partager des fichiers à l'aide d'un répertoire partagé, exécutez le conteneur en tapant la commande donnée:
Remarque: des problèmes d'autorisations peuvent survenir car les utilisateurs du conteneur ne sont pas les mêmes que ceux de l'hôte.
la source
docker exec -it <container_id> bash -c 'cat > /path/to/container/file' < /path/to/host/file/
cat
ce ne sera pas résilié une fois qu'il se termine. Si cela vous importe (si vous copiez des scripts bash, bash refusera de les exécuter), vous devez exécuterlsof | grep yourfilename
et tuer lecat
processus qui contient ledit fichier.kill $(lsof | grep /path/to/file | sed ...)
. Je serai reconnaissant pour votre aidekill $(docker top CONTAINERNAME | sed -n '/cat$/p' | sed 's/^root[^0-9]\+\([0-9]\+\).*$/\1/')
Il s'agit de la commande pour copier les données de Docker vers l'hôte:
Vous trouverez ci-dessous la commande pour copier les données de l'hôte vers le docker:
la source
Dans un environnement docker, tous les conteneurs se trouvent dans le répertoire:
/var/lib/docker/aufs/required-docker-id/
Pour copier le répertoire / fichier source dans n'importe quelle partie du conteneur, tapez la commande donnée:
sudo cp -r mydir/ /var/lib/docker/aufs/mnt/required-docker-id/mnt/
la source
tar
etdocker cp
sont un bon combo pour tout copier dans un répertoire.Créer un conteneur de volume de données
Pour conserver la hiérarchie des répertoires
Vérifie ton travail
la source
Si l'hôte est CentOS ou Fedora, il n'y a pas de proxy
/var/lib/docker/aufs
, mais il est sous/proc
:Cette cmd copiera tout le contenu du
data
répertoire dans le/
conteneur avec l'ID "containerid".la source
/proc
). Étendez également le chemin pour placer le fichier ailleurs, pas seulement root.mycontainer
Si quelqu'un comme moi ne sait pas ce que signifie la réponse @ h3nrik, il s'agit en fait de l'ID du conteneur. Pour copier un fichierWarpSquare.mp4
dans/app/example_scenes/1440p60
d'un conteneur docker dans le dossier en cours est sorti je cela.où
docker ps -q -l
extrait l'ID de conteneur de la dernière instance terminée. Si ce n'est pas un conteneur sorti, vous pouvez le récupérerdocker container ls
oudocker ps
la source
docker ps -a
oudocker container ls -a
.Beaucoup de ceux qui trouvent cette question peuvent avoir le problème de copier des fichiers dans une image Docker pendant sa création (je l'ai fait).
Dans ce cas, vous pouvez utiliser la
COPY
commande dans laDockerfile
que vous utilisez pour créer l'image.Consultez la documentation .
la source
Vous pouvez simplement tracer l'adresse IP de votre machine locale en utilisant
Ensuite, entrez simplement dans votre conteneur Docker et tapez
Dans tous les cas, si vous n'avez pas de client et de serveur SSH installé, installez-le simplement en utilisant:
la source
Il s'agit d'un onliner pour copier un seul fichier lors de l'exécution d'un conteneur tomcat.
Cela copiera le fichier war dans le répertoire webapps et fera fonctionner votre application en un rien de temps.
la source
Syntaxe de Container Up:
Dans le fichier Docker
la source
La meilleure façon de copier des fichiers dans le conteneur que j'ai trouvé est de monter un répertoire sur l'hôte en utilisant l'
-v
option de la commande docker run.la source
Il y a de bonnes réponses, mais trop spécifiques. Je trouve que
docker ps
c'est un bon moyen d'obtenir l'identifiant du conteneur qui vous intéresse.pour voir où le volume est monté. C'est
pour moi, mais ce pourrait être un chemin différent selon le système d'exploitation et la configuration. Maintenant, copiez simplement les fichiers sur ce chemin.
L'utilisation
-v
n'est pas toujours pratique.la source
Je viens de commencer à utiliser Docker pour compiler VLC, voici ce que vous pouvez faire pour copier des fichiers dans les deux sens à partir de conteneurs:
Recherchez un fichier familier dans ce txt et vous aurez le dossier, cd-y en tant que root et le tour est joué! copiez tout ce que vous voulez.
Il pourrait y avoir un chemin avec "fusionné" dedans, je suppose que vous voulez celui avec "diff" dedans.
De plus, si vous quittez le conteneur et que vous souhaitez revenir là où vous vous étiez arrêté:
Je suppose que c'est utile quand vous n'avez rien nommé avec une commande comme
Bien sûr, la méthode de piratage, mais alors quoi!
la source
Par exemple, je veux copier mon fichier xxxx / download / jenkins sur tomcat
Je commence à obtenir l'identifiant du conteneur Tomcat
la source
Ma méthode préférée:
CONTENANTS:
file.txt
ou
la source
À mon avis, vous ne devez pas copier les fichiers à l'intérieur de l'image, mais vous pouvez utiliser GIT ou SVN pour vos fichiers, puis définir un volume synchronisé avec un dossier local. Utilisez un script lors de l'exécution du conteneur qui peut vérifier si les données existent déjà dans le dossier local sinon les copier depuis le référentiel GIT. Cela rend votre image très légère.
la source