GNU/Linux >> Tutoriels Linux >  >> Linux

Explorer le système de fichiers du conteneur Docker

Voici quelques méthodes différentes...

A) Utiliser docker exec (le plus simple)

Docker version 1.3 ou plus récente prend en charge la commande exec qui se comportent comme nsenter . Cette commande peut exécuter un nouveau processus dans un conteneur déjà en cours d'exécution (le conteneur doit déjà avoir le processus PID 1 en cours d'exécution). Vous pouvez exécuter /bin/bash pour explorer l'état du conteneur :

docker exec -t -i mycontainer /bin/bash

voir la documentation de la ligne de commande Docker

B) Utiliser l'instantané

Vous pouvez évaluer le système de fichiers du conteneur de cette façon :

# find ID of your running container:
docker ps

# create image (snapshot) from container filesystem
docker commit 12345678904b5 mysnapshot

# explore this filesystem using bash (for example)
docker run -t -i mysnapshot /bin/bash

De cette façon, vous pouvez évaluer le système de fichiers du conteneur en cours d'exécution au moment précis. Le conteneur est toujours en cours d'exécution, aucune modification future n'est incluse.

Vous pouvez ensuite supprimer l'instantané en utilisant (le système de fichiers du conteneur en cours d'exécution n'est pas affecté !) :

docker rmi mysnapshot

C) Utiliser ssh

Si vous avez besoin d'un accès continu, vous pouvez installer sshd sur votre conteneur et exécuter le démon sshd :

 docker run -d -p 22 mysnapshot /usr/sbin/sshd -D
 
 # you need to find out which port to connect:
 docker ps

De cette façon, vous pouvez exécuter votre application en utilisant ssh (connectez-vous et exécutez ce que vous voulez).

D) Utiliser nsenter

Utilisez nsenter , consultez Pourquoi vous n'avez pas besoin d'exécuter SSHd dans vos conteneurs Docker

La version courte est :avec nsenter, vous pouvez obtenir un shell dans un conteneur existant, même si ce conteneur n'exécute pas SSH ou tout autre type de démon à usage spécial


MISE À JOUR :EXPLORATION !

Cette commande devrait vous permettre d'explorer un conteneur docker en cours d'exécution :

docker exec -it name-of-container bash

L'équivalent de ceci dans docker-compose serait :

docker-compose exec web bash

(web est le nom du service dans ce cas et il a tty par défaut.)

Une fois à l'intérieur, faites :

ls -lsa

ou toute autre commande bash comme :

cd ..

Cette commande devrait vous permettre d'explorer une image docker :

docker run --rm -it --entrypoint=/bin/bash name-of-image

une fois à l'intérieur faites :

ls -lsa

ou toute autre commande bash comme :

cd ..

Le -it signifie interactif... et tty.

Cette commande devrait vous permettre d'inspecter un conteneur ou une image Docker en cours d'exécution :

docker inspect name-of-container-or-image

Vous voudrez peut-être le faire et découvrir s'il y a un bash ou sh là-dedans. Recherchez entrypoint ou cmd dans le retour json.

REMARQUE : Cette réponse repose sur la présence de l'outil commen, mais s'il n'y a pas de bash shell ou des outils communs comme ls présent, vous pouvez d'abord en ajouter un dans une couche si vous avez accès au Dockerfile :exemple pour alpin :

RUN apk add --no-cache bash

Sinon si vous n'avez pas accès au Dockerfile puis copiez simplement les fichiers hors d'un conteneur nouvellement créé et parcourez-les en faisant :

docker create <image>  # returns container ID the container is never started.
docker cp <container ID>:<source_path> <destination_path>
docker rm <container ID>
cd <destination_path> && ls -lsah

voir la documentation de docker exec

voir la documentation de docker-compose exec

voir la documentation d'inspection de docker

voir la documentation de création de docker


Dans le cas où votre conteneur est arrêté ou n'a pas de shell (par exemple hello-world mentionné dans le guide d'installation, ou non alpine traefik ), c'est probablement la seule méthode possible pour explorer le système de fichiers.

Vous pouvez archiver le système de fichiers de votre conteneur dans un fichier tar :

docker export adoring_kowalevski > contents.tar

Ou listez les fichiers :

docker export adoring_kowalevski | tar t

Notez que selon l'image, cela peut prendre du temps et de l'espace disque.


Linux
  1. Dites simplement non à la racine (dans des conteneurs)

  2. Quelques commandes DOCKER

  3. Verrouillage du système de fichiers CWP

  4. Transférer le port hôte vers le conteneur Docker

  5. Docker dans Docker ne peut pas monter le volume

Introduction au système de fichiers Linux

Commande Fsck sous Linux (réparer le système de fichiers)

Administration du système de fichiers réseau (NFS) sous Linux

Comment se connecter en SSH à un conteneur Docker

Qu'est-ce que le système de fichiers Linux ? Guide facile

Comment gérer les conteneurs Docker