Comment entrer dans un conteneur Docker qui fonctionne déjà avec un nouveau TTY

j'ai un conteneur qui exécute le service Apache au premier plan. Je voudrais être en mesure d'accéder au conteneur à partir d'un autre shell afin de "fouiner" à l'intérieur et examiner les dossiers. En ce moment, si je me fixe sur le conteneur, je me retrouve à regarder le démon Apache et je ne peux exécuter aucune commande.

est-il possible de fixer un autre ATS à un conteneur roulant? Éventuellement, je peux profiter du fait que le Panneau est en fait juste envelopper autour des conteneurs LXC? J'ai essayé sudo lxc-console -n [container-id] -t [1-4] mais il semble qu'un seul ATS soit disponible et c'est celui qui exécute le démon apache. Peut-être y a-t-il un moyen d'activer plusieurs consoles lxc pendant la construction?

je préférerais pas configurer et construire le conteneur avec un service openssh si possible.

388
demandé sur Diogo Gomes 2014-01-05 14:13:41

9 réponses

avec docker 1.3, il y a une nouvelle commande docker exec . Cela vous permet d'entrer un docker courant:

docker exec -it [container-id] bash
756
répondu Michael_Scharf 2017-07-11 17:41:48

vous devez utiliser L'outil de Jérôme Petazzoni appelé "nsenter" pour entrer dans un conteneur sans utiliser SSH. Voir: https://github.com/jpetazzo/nsenter

Installer simplement en cours d'exécution: docker run -v /usr/local/bin:/target jpetazzo/nsenter

utiliser ensuite la commande docker-enter <container-id> pour entrer dans le conteneur.

39
répondu Hyperfocus 2014-07-05 13:57:03

mise à Jour

à partir du docker 0.9, pour que les étapes ci-dessous fonctionnent, il faut maintenant mettre à jour le fichier /etc/default/docker avec le '-e lxc' vers l'option de démarrage du démon docker avant de redémarrer le démon (Je l'ai fait en redémarrant l'hôte).

update to the /etc/default/docker file

C'est tout parce que...

... il [docker 0.9] contient un nouveau " conducteur de moteur" abstraction pour rendre possible l'utilisation D'autres API que LXC pour démarrer les conteneurs. Il fournit également une nouvelle pilote moteur basé sur une nouvelle bibliothèque D'API (libcontainer) qui est capable pour gérer les groupes de contrôle sans utiliser les outils LXC. La question principale est de que si vous comptez sur lxc-attach pour effectuer des actions sur votre container, comme démarrer une coquille à l'intérieur du container, qui est extrêmement utile pour l'environnement de développement...

source

veuillez noter que cela empêchera la nouvelle fonctionnalité optionnelle hôte uniquement réseau de docker 0.11 de" fonctionner " et vous ne verrez que l'interface de boucle. rapport de bogue


il s'avère que la solution à une autre question était aussi la solution à celle-ci:

...vous pouvez utiliser docker ps -notrunc pour obtenir l'identification complète du conteneur lxc et ensuite, utilisez lxc-attach -n <container_id> run bash dans ce conteneur comme racine.

mise à Jour: Vous aurez bientôt besoin d'utiliser ps --no-trunc au lieu de ps -notrunc qui est désapprouvée.

enter image description here Trouver le conteneur complet ID

enter image description here Entrez la commande LXC attach.

enter image description here Le haut montre mon processus apache en cours d'exécution que docker a commencé.

18
répondu Programster 2017-05-23 12:34:42

nsenter fait ça. Cependant, j'ai également eu besoin d'entrer dans un récipient d'une manière simple et nsenter ne suffisait pas pour mes besoins. Il a été buggy dans certaines occasions (écran noir plus-drapeau wd ne fonctionne pas). En outre, je voulais vous connecter en tant qu'utilisateur spécifique et dans un répertoire spécifique.

j'ai fini par fabriquer mon propre outil pour entrer dans les conteneurs. Vous pouvez le trouver à: https://github.com/Pithikos/docker-enter

son usage est comme facile comme

./docker-enter [-u <user>] [-d <directory>] <container ID>
4
répondu Pithikos 2014-07-30 16:42:04

Qu'en est-il de l'exécution de l'écran tmux/GNU dans le conteneur? Semble plus moyen d'accéder à autant de vty que vous voulez avec un simple:

$ docker attach {container id}
3
répondu cig0 2016-05-01 05:00:51

Première étape obtenir l'id de conteneur:

docker ps

cela vous montrera quelque chose comme

CONTENEUR ID IMAGE COMMAND CREATED STATUS PORTS NAMES

1170fe9e9460 localhost: 5000 / python: env-7e847468c4d73a0f35e9c5164046ad88 ". /run_notebook.sh "26 seconds ago Up 25 seconds 0.0.0.0:8989->9999/tcp SLURM_TASK-303337_0

1170fe9e9460 est le numéro d'identification du conteneur dans ce cas.

Second , entrez le docker :

docker exec -it [container_id] bash

donc, dans le cas ci-dessus: docker exec -it 1170fe9e9460 bash

3
répondu patapouf_ai 2018-01-24 18:04:23

Le "nsinit":

installer nsinit

git clone git@github.com:dotcloud/docker.git
cd docker
make shell

de l'intérieur du réservoir:

go install github.com/dotcloud/docker/pkg/libcontainer/nsinit/nsinit

de l'extérieur:

docker cp id_docker_container:/go/bin/nsinit /root/

utiliser

cd /var/lib/docker/execdriver/native/<container_id>/
nsinit exec bash
2
répondu Ivailo Bardarov 2015-11-10 23:06:51

j'ai commencé powershell sur une exécution microsoft / iis en tant que démon à l'aide de

docker exec -it <nameOfContainer> powershell
1
répondu Ahmed Samir 2017-10-17 12:27:04
docker exec -t -i container_name /bin/bash

vous mènera à la console des conteneurs.

1
répondu Zemuldo 2017-11-20 11:37:03