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.
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
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.
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).
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...
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, utilisezlxc-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.
Trouver le conteneur complet ID
Entrez la commande LXC attach.
Le haut montre mon processus apache en cours d'exécution que docker a commencé.
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>
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}
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
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
j'ai commencé powershell sur une exécution microsoft / iis en tant que démon à l'aide de
docker exec -it <nameOfContainer> powershell
docker exec -t -i container_name /bin/bash
vous mènera à la console des conteneurs.