Je voudrais extraire un fichier d'une image Docker sans avoir à exécuter l'image.
L' docker save
option n'est pas actuellement une option viable pour moi car elle enregistre un fichier trop volumineux juste pour annuler le tar d'un fichier spécifique.
Réponses:
Vous pouvez extraire des fichiers d'une image avec les commandes suivantes:
Selon la
docker create
documentation , cela n'exécute pas le conteneur:Pour référence (ma réponse précédente), un moyen moins efficace d'extraire un fichier d'une image est le suivant:
la source
docker run --entrypoint /bin/sh my_image -c /bin/cat some_file
Rien de ce qui précède n'a fonctionné pour moi. La commande de travail complète est:
docker run --rm --entrypoint /bin/sh image_name -c "cat /path/filename" > output_filename
Sans guillemets
cat
est passé sans nom de fichier, donc il ne sait pas quoi montrer. C'est également une bonne idée de supprimer le conteneur une fois la commande terminée.la source
Si je ne me trompe pas, je pense que les conteneurs Docker stockent les fichiers mis en cache créés dans le répertoire suivant pour Ubuntu:
/var/lib/docker/aufs/diff/<container_id>
De là, vous devriez pouvoir accéder au système de fichiers et récupérer vos fichiers.
la source
layersize
etjson
, et n'est pas non plus lisible par l'utilisateur (même si l'utilisateur est dans le groupe docker)./var/lib/docker/aufs/diff
contiendra le fichier que je recherche (mais n'est pas classé par ID de conteneur) et n'est pas non plus lisible./var/lib/docker/aufs
(mais pas à tous les autres répertoires/var/lib/docker/
)Si le stockage de la sortie complète de
docker save
n'est pas une option, vous pouvez utiliser des pipelines pour en extraire uniquement le fichier nécessaire.Malheureusement, comme la sortie est un "goudron de goudron", il peut s'agir d'un processus légèrement itératif.
Ce que j'ai fait lorsque j'ai eu besoin d'extraire un fichier tout à l'heure était:
1) Déterminez quelle version de l'image le fichier qui vous intéresse a changé le plus récemment (la façon dont vous procédez dépend probablement de votre image) et la date de sa création / sauvegarde
2) Obtenez la table des matières complète de la sortie de la
docker save
commande avec:3) Affinez le
layer.tar
(s) fichier (s) dans la sortie de cette commande qui correspondent à la date de l'image que vous avez déterminée à l'étape 1. (vous pouvez ajouter| grep layer.tar
pour simplement afficher ces fichiers)4) Extrayez ce
layer.tar
fichier en sortie standard et récupérez la table des matières:5) Vérifiez que le fichier souhaité est répertorié et extrayez-le une fois que vous avez trouvé le nom:
Si plusieurs
layer.tar
fichiers correspondent à la date recherchée à l'étape 2/3, vous devrez peut-être répéter l'étape 4 pour chacun d'eux jusqu'à ce que vous trouviez le bon.Remplacez le texte en majuscules dans les commandes ci-dessus par les noms d'image, les sommes de contrôle et les noms de fichiers corrects pour votre cas.
la source