Je commence à travailler avec Docker. J'utilise l'image de base WordPress et docker-compose.
J'essaie de ssh dans l'un des conteneurs pour inspecter les fichiers / répertoires qui ont été créés lors de la construction initiale. J'ai essayé de courir docker-compose run containername ls -la
, mais cela n'a rien fait. Même si c'est le cas, je préfère avoir une console où je peux parcourir la structure de répertoires, plutôt que d'exécuter une seule commande. Quelle est la bonne façon de procéder avec Docker?
docker
docker-container
Andrew
la source
la source
docker exec
askubuntu.com/a/543057/35816 . Obtenez l'identifiant du conteneur en utilisantdocker ps
sudo docker run -it --entrypoint /bin/bash <container_name>
vous met dans le conteneur de manière interactive. Ensuite, on peut inspecter le système de fichiers dans le conteneur en utilisantcd <path>
Réponses:
docker attach
vous permettra de vous connecter à votre conteneur Docker, mais ce n'est pas vraiment la même chose quessh
. Si votre conteneur exécute un serveur Web, par exemple,docker attach
il vous connectera probablement à la sortie standard du processus de serveur Web. Cela ne vous donnera pas nécessairement un coquillage.La
docker exec
commande est probablement ce que vous recherchez; cela vous permettra d'exécuter des commandes arbitraires dans un conteneur existant. Par exemple:Bien entendu, la commande que vous exécutez doit exister dans le système de fichiers du conteneur.
Dans la commande ci-dessus se
<mycontainer>
trouve le nom ou l'ID du conteneur cible. Peu importe que vous utilisiez ou nondocker compose
; il suffit d'exécuterdocker ps
et d'utiliser soit l'ID (une chaîne hexadécimale affichée dans la première colonne) ou le nom (affiché dans la dernière colonne). Par exemple, étant donné:Je peux courir:
Je pourrais accomplir la même chose en exécutant:
De même, je pourrais démarrer un shell dans le conteneur;
la source
docker exec
ne fonctionne que sur les conteneurs en cours d'exécution (sinon utiliserdocker run -it --entrypoint /bin/bash
ou similaire).-it
est une combinaison de-i
et-t
qui est--interactive
("Garder STDIN ouvert même s'il n'est pas attaché") respectivement--tty
("Allouer un pseudo-ATS").docker run -it --entrypoint /bin/bash <imageid> --any --more --args
, juste pour clarifier pour les gens--any --more --args
vous avez seront intégrés dans ce que l'image a défini commeCMD
et non Docker (ou si votre image définit seulement uneENTRYPOINT
et pasCMD
, alors ces options sera alimenté en/bin/bash
tant que vous avez spécifié ici ). Ainsi, par exemple, toutes les autresdocker run
options (par exemple--net "host"
) doivent précéder le<imageid>
.Pour bash dans un conteneur en cours d'exécution, tapez ceci:
ou
ou
la source
docker exec -it
au lieu dedocker exec -t -i
Disons que, pour des raisons qui vous sont propres, vous voulez vraiment utiliser SSH. Cela prend quelques étapes, mais cela peut être fait. Voici les commandes que vous exécuteriez à l'intérieur du conteneur pour le configurer ...
Maintenant, vous pouvez même exécuter des applications graphiques (si elles sont installées dans le conteneur) à l'aide du transfert X11 vers le client SSH:
Voici quelques ressources connexes:
la source
Si vous êtes ici à la recherche d'une réponse spécifique à Docker Compose comme je l'ai été, cela vous permet d'accéder facilement sans avoir à rechercher l'ID de conteneur généré.
docker-compose exec
prend le nom du service selon votredocker-compose.yml
fichier.Donc, pour obtenir un shell Bash pour votre service 'web', vous pouvez faire:
la source
docker-compose run
fonctionne également si votre conteneur n'existe pas encore.Remarque : cette réponse fait la promotion d'un outil que j'ai écrit.
J'ai créé un serveur SSH conteneurisé que vous pouvez «coller» à n'importe quel conteneur en cours d'exécution. De cette façon, vous pouvez créer des compositions avec chaque conteneur. La seule exigence est que le conteneur ait Bash.
L'exemple suivant démarrerait un serveur SSH attaché à un conteneur avec le nom 'mon-conteneur'.
Lorsque vous vous connectez à ce service SSH (avec le client SSH de votre choix), une session Bash est lancée dans le conteneur avec le nom «mon-conteneur».
Pour plus de pointeurs et de documentation, voir: https://github.com/jeroenpeeters/docker-ssh
la source
less
je montrais un avertissement à chaque fois que je l'exécutais, etc. L'utilisation du conteneur de Jeroen me donne une bien meilleure expérience jusqu'à présent. Assurez-vous simplement de consulter la documentation . L'exemple de commande dans la réponse ne semble plus valide.Si vous utilisez Docker sous Windows et souhaitez obtenir un accès shell à un conteneur, utilisez ceci:
Très probablement, vous avez déjà installé Git Bash . Sinon, assurez-vous de l'installer.
la source
Si le conteneur est déjà sorti (peut-être en raison d'une erreur), vous pouvez le faire
ou
ou
pour créer un nouveau conteneur et y mettre un shell. Puisque vous avez spécifié --rm, le conteneur sera supprimé lorsque vous quittez le shell.
la source
Dans certains cas, votre image peut être basée sur les Alpes. Dans ce cas, il lancera:
Parce que
/bin/bash
ça n'existe pas. Au lieu de cela, vous devez utiliser:ou
la source
SSH dans un conteneur Docker à l'aide de cette commande:
la source
Pour vous connecter à cmd dans un conteneur Windows, utilisez
Où d8c25fde2769 est l'ID du conteneur.
la source
C'est simple !
Listez toutes vos images Docker:
Sur mon système, il a montré la sortie suivante:
J'ai deux images Docker sur mon PC. Disons que je veux exécuter le premier.
Cela vous donnera un contrôle terminal du conteneur. Vous pouvez maintenant effectuer tout type d'opérations shell à l'intérieur du conteneur. Comme faire
ls
, tous les dossiers seront affichés à la racine du système de fichiers.la source
Pour inspecter les fichiers, exécutez
docker run -it <image> /bin/sh
pour obtenir un terminal interactif. La liste des images peut être obtenue pardocker images
. Contrairement àdocker exec
cette solution, cela fonctionne également dans le cas où une image ne démarre pas (ou se ferme immédiatement après l'exécution).la source
SOLUTION GOINSIDE
installer l'
goinside
outil de ligne de commande avec:et entrez dans un conteneur docker avec une taille de terminal appropriée avec:
ancienne réponse
Nous avons mis cet extrait dans
~/.profile
:Non seulement cela permet à tout le monde de pénétrer dans un conteneur en cours d'exécution avec:
Il résout également un problème de longue durée concernant les tailles fixes de terminaux à conteneurs Docker . Ce qui est très ennuyeux si vous y faites face.
De plus, si vous suivez le lien, vous obtiendrez également la fin de la commande pour les noms de vos conteneurs Docker.
la source
Ou selon la coque, il peut être
Vous pouvez obtenir le container-Id via la
docker ps
commande-i
= interactif-t
= pour allouer un pseudo-ATSla source
J'ai créé une fonction de terminal pour un accès plus facile au terminal du conteneur. Peut-être que cela vous est également utile:
Le résultat est donc, au lieu de taper:
vous écrirez:
Mettez ce qui suit dans votre ~ / .bash_profile (ou tout ce qui vous convient), puis ouvrez une nouvelle fenêtre de terminal et profitez du raccourci:
la source
vous pouvez interagir avec le terminal dans le conteneur docker en passant l'option -ti
-t signifie terminal -i signifie interactif
la source
docker exec
sera certainement une solution. Un moyen facile de travailler avec la question que vous avez posée est de monter le répertoire dans Docker dans le répertoire du système local .Pour que vous puissiez visualiser instantanément les modifications du chemin local.
la source
Utilisation:
L'autre façon, bien qu'il y ait un danger, est d'utiliser
attach
, mais si vous Ctrl+ Cpour quitter la session, vous arrêterez également le conteneur. Si vous voulez simplement voir ce qui se passe, utilisezdocker logs -f
.la source
Utilisez cette commande:
la source
Si Docker est installé avec
Kitematic
, vous pouvez utiliser l'interface graphique. Ouvrez àKitematic
partir de l'icône Docker et dans laKitematic
fenêtre, sélectionnez votre conteneur, puis cliquez sur l'exec
icône.Vous pouvez également voir le journal du conteneur et de nombreuses informations sur le conteneur (dans l'onglet Paramètres) dans cette interface graphique.
la source
Dans mon cas, pour une ou plusieurs raisons, je dois vérifier toutes les informations réseau impliquées dans chaque conteneur. Les commandes suivantes doivent donc être valides dans un conteneur ...
J'ai vérifié toutes ces réponses, aucune ne m'a été utile. J'ai recherché des informations sur d'autres sites Web. Je n'ajouterai pas de super lien ici, car il n'est pas écrit en anglais. Je viens donc de mettre en place ce poste avec une solution récapitulative pour les personnes qui ont les mêmes exigences que moi.
Supposons que vous ayez un conteneur en cours d'exécution nommé light-test. Suivez les étapes ci-dessous.
docker inspect light-test -f {{.NetworkSettings.SandboxKey}}
. Cette commande recevra une réponse comme/var/run/docker/netns/xxxx
.ln -s /var/run/docker/netns/xxxx /var/run/netns/xxxx
. Le répertoire peut ne pas exister, faites d'mkdir /var/run/netns
abord.ip netns exec xxxx ip addr show
pour explorer le monde du réseau en conteneur.PS.
xxxx
est toujours la même valeur reçue de la première commande. Et bien sûr, toutes les autres commandes sont valides, c'est-à-direip netns exec xxxx netstat -antp|grep 8080
.la source
Une autre option consiste à utiliser nsenter .
la source
nsenter
. Le premier est qu'il nécessite que vous ayez un accès physique à l'hôte docker, ce qui n'est pas une donnée (vous travaillez peut-être avec une API docker distante). En outre, l'exécution sousnsenter
vous exempte de plusieurs des restrictions de sécurité et de ressources que Docker met en place (qui peuvent être un pro ou un con, selon votre environnement).docker exec
ces jours-ci.docker exec
.docker exec
me semble plus élégant.Si vous utilisez Docker Compose, cela vous amènera à l'intérieur d'un conteneur Docker.
À l'intérieur du conteneur, il vous amènera à WORKDIR défini dans le Dockerfile. Vous pouvez modifier votre répertoire de travail en
la source
Pour exécuter dans un conteneur en cours d'exécution nommé
test
, voici les commandes suivantesSi le conteneur a une
bash
coqueSi le conteneur a une
bourne
coque et la plupart des cas, il est présentla source
Pour docker-compose up (Docker4Drupal)
J'utilise Docker pour Drupal sur un ordinateur portable Linux. Après avoir exécuté le conteneur, j'utilise '
docker-compose exec php bash
' pour me connecter au conteneur afin de pouvoir exécuter des commandos drush. Ça fonctionne bien pour moi.la source