Comment puis-je obtenir un Docker du conteneur de shell?
Je suis arriver a commencé à travailler avec Docker. Je suis en utilisant le WordPress de base de l'image et docker-composer.
Je suis en train de faire un ssh sur un des conteneurs pour inspecter les fichiers/répertoires qui ont été créés lors de la construction initiale. J'ai essayé d'exécuter docker-compose run containername ls -la
, mais qui n'a rien fait. Même si elle l'a fait, je préfère avoir une console où je peux parcourir l'arborescence, plutôt que d'exécuter une seule commande. Quelle est la bonne façon de le faire avec Docker?
- Ainsi, il semble que la réponse est docker attacher. Mais comment puis-je obtenir à partir de docker-composer?
- Utilisation
docker exec
askubuntu.com/a/543057/35816 . Obtenir le numéro du conteneur à l'aide dedocker ps
sudo docker run -it --entrypoint /bin/bash <container_name>
vous reçoit dans le récipient de manière interactive. Ensuite, on peut inspecter le système de fichiers dans le conteneur à l'aide decd <path>
Vous devez vous connecter pour publier un commentaire.
docker attach
vous permettra de vous connecter à votre Panneau de conteneurs, mais ce n'est pas vraiment la même chose quessh
. Si votre récipient est en cours d'exécution d'un serveur web, par exemple,docker attach
sera probablement de vous connecter sur le stdout de processus du serveur web. Il ne sera pas nécessairement vous donner un shell.La
docker exec
commande est probablement ce que vous cherchez; cela vous permettra d'exécuter des commandes arbitraires à l'intérieur d'un conteneur. Par exemple:Bien sûr, la commande que vous êtes en cours d'exécution doit exister dans le conteneur de système de fichiers.
Dans la commande ci-dessus
<mycontainer>
est le nom ou l'ID du conteneur cible. Il n'a pas d'importance si vous utilisez ou non ledocker compose
; il suffit d'exécuterdocker ps
et utiliser l'ID (une chaîne hexadécimale affiché dans la première colonne) ou le nom (affiché dans la dernière colonne). E. g., donnée:Je peux courir:
Je pourrais faire la même chose en cours d'exécution:
De la même façon, je pourrais lancer un interpréteur de commandes dans le récipient;
docker exec
ne fonctionne que sur l'exécution des conteneurs (sinon utiliserdocker run -it --entrypoint /bin/bash
ou similaire).-it
est une combinaison de-i
et-t
qui est--interactive
("Keep STDIN ouverts, même si pas attachés") respectivement--tty
(" Allouer un pseudo-TTY").sudo chmod -R 777 /directory
docker run -it --entrypoint /bin/bash <imageid> --any --more --args
, juste pour clarifier, pour les personnes--any --more --args
vous avez sera alimenté quelle que soit l'image est définie comme saCMD
et pas de menu fixe (ou si votre image définit seulement uneENTRYPOINT
et pas deCMD
, ces options seront introduits dans/bin/bash
comme vous l'avez spécifié ici). Ainsi, par exemple, toute autredocker run
options (par exemple,--net "host"
) besoin d'aller de l'avant de la<imageid>
.Bash en exécution d'un conteneur, tapez ceci:
docker exec -it
au lieu dedocker exec -t -i
Disons que, pour des raisons qui sont les vôtres, vous avez vraiment ne voulez utiliser SSH. Il prend quelques étapes, mais il peut être fait. Voici les commandes que vous exécutez l'intérieur du conteneur pour le configurer...
Maintenant, vous pouvez même exécuter des applications graphiques (s'ils sont installés dans le conteneur) à l'aide de la redirection X11 pour le client SSH:
Voici quelques ressources connexes:
Avis: cette réponse fait la promotion d'un outil que j'ai écrit.
J'ai créé un conteneur serveur SSH que vous pouvez "coller" à l'exécution d'un conteneur. De cette façon, vous pouvez créer des compositions avec chaque conteneur. La seule exigence est que le conteneur a Bash.
L'exemple suivant démarrer un serveur SSH relié à un récipient avec le nom "mon-container".
Lorsque vous vous connectez à ce service SSH (avec votre client SSH de choix) un Bash session sera lancé dans le récipient avec le nom "mon-container".
Pour plus de pointeurs et de la documentation, voir: https://github.com/jeroenpeeters/docker-ssh
less
a été montrant un avertissement à chaque fois que je le lance, etc. À l'aide de Jeroen du conteneur est de me donner une meilleure expérience jusqu'à présent. Assurez-vous de consulter la documentation. L'exemple de commande dans la réponse ne semble plus valide.Si vous êtes ici à la recherche d'un Docker Message-réponse spécifique comme je l'étais, il fournit un moyen facile sans avoir à rechercher l'généré numéro du conteneur.
docker-compose exec
prend le nom de service par votredocker-compose.yml
fichier.Donc, pour obtenir un shell Bash pour votre "web service", vous pouvez le faire:
Si vous utilisez le Panneau sur Windows et que vous voulez accéder à un shell à un conteneur, utilisez ceci:
Très probablement, vous avez déjà Git Bash installé. Si vous ne le faites pas, veillez à l'installer.
SSH vers un Docker conteneur à l'aide de cette commande:
Dans certains cas, votre image peut être Alpin-fondé. Dans ce cas, il va le jeter:
Parce que
/bin/bash
n'existe pas. Au lieu de cela, vous devez utiliser:ou
Pour se connecter à cmd sous Windows conteneur, utilisez
Où d8c25fde2769 est le numéro du conteneur.
Si le conteneur a déjà sorti (peut-être en raison d'une erreur), vous pouvez le faire
ou
ou
pour créer un nouveau conteneur et obtenez une coque en elle. Depuis que vous avez spécifié --rm, le conteneur serait supprimé lorsque vous quittez le shell.
GOINSIDE SOLUTION
installer
goinside
outil en ligne de commande:et aller à l'intérieur d'un conteneur docker avec une bonne taille du terminal avec:
vieille réponse
Nous avons mis cet extrait dans
~/.profile
:Pas seulement ce que chacun puisse pénétrer à l'intérieur de l'exécution d'un conteneur avec:
Elle résout également une longue durée de vie problème fixe sur le Panneau du terminal de conteneurs de tailles. Ce qui est très ennuyeux si vous faites face à elle.
Aussi si vous suivez le lien vous aurez la fin de commande pour votre menu fixe contenant les noms de trop.
Il est simple!
Liste de toutes vos images Docker:
Sur mon système, il a montré le résultat suivant:
J'ai deux Docker images sur mon PC. Disons que je me voulez exécuter la première.
Cela vous donnera le terminal de contrôle du conteneur. Maintenant, vous pouvez faire tout type d'opérations de shell à l'intérieur du conteneur. Comme faire
ls
sera de sortie de tous les dossiers à la racine du système de fichiers.Utilisez cette commande:
docker exec
va certainement être une solution. Un moyen facile de travailler avec la question que vous avez posée est par montage du répertoire à l'intérieur de menu fixe pour le système local du répertoire.De sorte que vous pouvez afficher les modifications dans le chemin d'accès local instantanément.
Utilisation:
L'autre sens, mais il est un danger pour elle, est d'utiliser
attach
, mais si vous Ctrl + C pour quitter la session, vous pourrez également arrêter le conteneur. Si vous voulez juste pour voir ce qui se passe, utilisezdocker logs -f
.Pour inspecter des fichiers, d'exécuter
docker run -it <image> /bin/bash
pour obtenir une borne interactive. La liste des images peut être obtenue pardocker images
. Contrairement àdocker exec
cette solution fonctionne également dans le cas où une image ne démarre pas (ou se ferme immédiatement après l'exécution).Si vous avez le Panneau installé avec
Kitematic
, vous pouvez utiliser l'interface graphique. OuvrirKitematic
à partir de l'icône de menu fixe et dans leKitematic
fenêtre sélectionnez votre conteneur, puis cliquez sur leexec
icône.Vous pouvez voir le journal de conteneur et beaucoup de renseignements sur l'emballage (dans l'onglet paramètres) en ce GUI trop.
Ou selon le shell, il peut être
Vous pouvez obtenir le conteneur-Id via
docker ps
commande-i
= interactif-t
= allouer un pseudo-TTYDans mon cas, pour une raison quelconque(s) j'ai besoin de vérifier tout le réseau concernées de l'information dans chaque récipient. Donc les commandes suivantes doivent être valides dans un conteneur...
J'ai vérifié au travers de toutes ces réponses, aucun n'a été utile pour moi. J'ai recherché des informations dans d'autres sites web. Je ne vais pas ajouter un super lien ici, car il n'est pas écrit en anglais. Donc j'ai juste mis ce post avec un résumé de la solution pour les personnes qui ont les mêmes besoins que moi.
Dire que vous avez en cours d'exécution conteneur nommé la lumière de test. Suivez les étapes ci-dessous.
docker inspect light-test -f {{.NetworkSettings.SandboxKey}}
. Cette commande va obtenir de 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, nemkdir /var/run/netns
premier.ip netns exec xxxx ip addr show
à explorer réseau mondial dans le conteneur.PS.
xxxx
est toujours la même valeur reçue à partir 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
.vous pouvez interagir avec le terminal à conteneur docker en passant l'option -ti
-t signifie pour le terminal
-je représente interactive
J'ai créé une fonction terminal server pour faciliter l'accès au conteneur terminal. C'est peut-être utile de vous les gars ainsi:
De sorte que le résultat est, plutôt que de taper:
vous allez écrire:
Placez la ligne suivante dans votre ~/.bash_profile (ou tout ce qui fonctionne pour vous), puis ouvrez une nouvelle fenêtre de terminal et de profiter du raccourci:
Une autre option est d'utiliser nsenter.
nsenter
. La première est qu'il faut avoir un accès physique à l'docker hôte, ce qui n'est pas une donnée (vous pouvez travailler avec une télécommande support de l'API). En outre, l'exécution en vertu de l'nsenter
vous dispense de plusieurs de la sécurité et des restrictions de ressources que le Panneau met en place (qui peut être un avantage ou un inconvénient, selon votre environnement).docker exec
ces jours-ci.docker exec
.docker exec
ressemble plus élégant de moi.Si vous utilisez le Panneau de Composer puis cela vous mènera à l'intérieur d'un conteneur Docker.
À l'intérieur du conteneur, il va vous prendre pour WORKDIR définis dans le Dockerfile. Vous pouvez modifier votre répertoire de travail par
Pour docker-composer jusqu' (Docker4Drupal)
- Je utiliser Docker pour Drupal sur un Linux ordinateur portable. Après l'exécution du conteneur-je utiliser l'
docker-compose exec php bash
pour vous connecter avec le récipient de sorte que je puisse courir drush commandos. Il fonctionne très bien pour moi.