J'ai un conteneur qui exécute le service Apache au premier plan. Je voudrais pouvoir accéder au conteneur à partir d'un autre shell afin de «fouiller» à l'intérieur et d'examiner les fichiers. Pour le moment, si je m'attache au conteneur, je regarde le démon Apache et je ne peux exécuter aucune commande.
Est-il possible d'attacher un autre tty à un conteneur en cours d'exécution? Peut-être que je peux profiter du fait que Docker ne fait que s'enrouler autour des conteneurs LXC? J'ai essayé sudo lxc-console -n [container-id] -t [1-4]
mais il semble qu'un seul tty soit mis à disposition et c'est celui qui exécute le démon apache. Peut-être existe-t-il un moyen d'activer plusieurs consoles lxc pendant la génération?
Je préfère ne pas configurer et construire le conteneur avec un service openssh si possible.
docker attach [conainer-id]
?Réponses:
Avec docker 1.3, il y a une nouvelle commande
docker exec
. Cela vous permet d'entrer un docker en cours d'exécution:la source
exec
n'agit pas comme un terminal normal. Par exemple, vous ne pouvez pas changer d'utilisateur une fois à l'intérieur du conteneur.su someuser
changer d'utilisateur. Running Docker 1.4.1docker exec -it
qu'il fournira éventuellement un pseudo tty entièrement fonctionnel, mais pour l'instant (Docker version 1.9.1), il y a quelques lacunes: github.com/docker/docker/issues/8755Vous 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
Installez en exécutant simplement:
docker run -v /usr/local/bin:/target jpetazzo/nsenter
Utilisez ensuite la commande
docker-enter <container-id>
pour entrer dans le conteneur.la source
docker exec
. Cela vous permet d'entrer un docker en cours d'exécution:docker exec -it <container-id> bash
(voir ma réponse ci-dessous)docker-enter
Existe-t- il encore? Ça me donnecommand not found
.Mise à jour
À partir de docker 0.9, pour que les étapes ci-dessous fonctionnent maintenant, il faut maintenant mettre à jour le
/etc/default/docker
fichier avec l''-e lxc'
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 parce que ...
la source
Veuillez noter que cela empêchera la nouvelle fonctionnalité optionnelle de mise en réseau de l'hôte uniquement de docker 0.11 de "fonctionner" et vous ne verrez que l'interface de bouclage. rapport d'erreur
Il s'avère que la solution à une autre question était également la solution à celle-ci:
Mise à jour: vous devrez bientôt utiliser
ps --no-trunc
au lieu de celuips -notrunc
qui est obsolète.Trouver l'ID complet du conteneur
Entrez la commande lxc attach.
Le haut montre mon processus apache exécutant ce docker.
la source
Première étape, obtenez l'ID du conteneur:
docker ps
Cela vous montrera quelque chose comme
1170fe9e9460
est l'ID du conteneur dans ce cas.Deuxièmement , entrez le menu fixe:
docker exec -it [container_id] bash
donc dans le cas ci-dessus:
docker exec -it 1170fe9e9460 bash
la source
Qu'en est-il de l'exécution de tmux / GNU Screen dans le conteneur? Semble la manière la plus simple d'accéder à autant de vty que vous le souhaitez avec un simple:
la source
docker attach
et j'ai souligné que:...the attach command attaches to the running tty, not a new one, hence the question title is "...with new TTY"
nsenter
est-ce que. Cependant, je devais également entrer un conteneur de manière simple et nsenter ne suffisait pas à mes besoins. Il était buggé à certaines occasions (écran noir plus le drapeau -wd ne fonctionnait pas). De plus, je voulais me 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 des conteneurs. Vous pouvez le trouver sur: https://github.com/Pithikos/docker-enter
Son utilisation est aussi simple que
la source
La manière "nsinit" est:
installer nsinit
de l'intérieur du conteneur:
de dehors:
utilise le
la source
Vous amènera à la console des conteneurs.
la source
la source
J'ai démarré PowerShell sur un microsoft / iis en cours d'exécution en tant que démon en utilisant
la source
Sur Windows 10 , j'ai installé docker. J'exécute Jnekins sur un conteneur et j'ai rencontré le même message d'erreur. Voici un guide étape par étape pour résoudre ce problème:
Étape 1: Ouvrez gitbash et exécutez docker run -p 8080: 8080 -p 50000: 50000 jenkins.
Étape 2: ouvrez un nouveau terminal.
Étape 3: Faites "docker ps" pour obtenir la liste du conteneur en cours d'exécution. Copiez l'ID du conteneur.
Étape 4: Maintenant, si vous faites "docker exec -it {conteneur id} sh" ou "docker exec -it {conteneur id} bash", vous obtiendrez un message d'erreur similaire à "le périphérique d'entrée n'est pas un ATS. Si vous êtes en utilisant mintty, essayez de préfixer la commande avec 'winpty' "
Étape 5: Exécutez la commande " $ winpty docker exec -it {container id} sh "
vola !! Vous êtes maintenant à l'intérieur du terminal.
la source