Je veux SSH ou bash dans un conteneur de docker en cours d'exécution. S'il vous plaît, voir exemple:
$ sudo docker run -d webserver
webserver is clean image from ubuntu:14.04
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
665b4a1e17b6 webserver:latest /bin/bash ... ... 22/tcp, 80/tcp loving_heisenberg
maintenant je veux obtenir quelque chose comme ça (allez dans le conteneur en cours d'exécution):
$ sudo docker run -t -i webserver (or maybe 665b4a1e17b6 instead)
$ root@665b4a1e17b6:/#
However when I run the line above I get new CONTAINER ID
$ root@42f1e37bd0e5:/#
J'ai utilisé Vagrant et j'aimerais avoir un comportement similaire à celui de vagrant ssh
.
sudo docker exec -i -t 665b4a1e17b6 /bin/sh
pour être en mesure d'installer des programmes apt et forfaitssudo docker exec -i -t container-name /bin/bash
est un chemin à parcourir.Réponses:
La réponse est la
attach
commande de Docker . Donc, pour mon exemple ci-dessus, la solution sera:Pour Docker version 1.3 ou ultérieure: Merci à l'utilisateur WiR3D qui a suggéré un autre moyen d'obtenir le shell d'un conteneur. Si nous utilisons,
attach
nous ne pouvons utiliser qu'une seule instance du shell. Donc, si nous voulons ouvrir un nouveau terminal avec une nouvelle instance du shell d'un conteneur, il nous suffit d'exécuter les opérations suivantes:ou
la source
sudo docker attach loving_heisenberg
-i -t
est égal à-it
docker attach
Par exemple, si vous vous connectez à une instance MongoDB, l’instance sera détruite. Comme expliqué plus en détail dans cette questionattach
etexec
sont des animaux différents.À partir de Docker 1.3:
Fondamentalement, si le conteneur Docker a été démarré à l'aide de la
/bin/bash
commande, vous pouvez y accéder à l'aide deattach
. Sinon, vous devez exécuter la commande pour créer une instance Bash dans le conteneur à l'aide deexec
.Également pour quitter Bash sans laisser Bash s'exécuter dans un processus non autorisé:
Oui, c'est aussi simple que cela.
la source
RUN
commande dans le fichier docker est/bin/bash
. Mais cela dépend de ce que vous voulez dire. Si vous voulez exécuter le conteneur et que bash soit disponible immédiatement dans ce même terminal, alors exécutez-le avec-it
devrait le fairesudo
vsdocker
group. Quoi qu'il en soit, dockersudo
comporte une faille de sécurité pouvant fournir tous les privilèges du système de fichiers hôte à partir de l'invité, que vous utilisiez le groupe de docker ou que vous lanciez le conteneur.Bien que l’auteur de la question ait spécifiquement indiqué qu’il était intéressé par un conteneur en cours d’exécution, il convient également de noter que si le conteneur n’est pas en cours d’exécution, vous souhaitez le lancer pour fouiller dans tous les sens:
docker run -i -t --entrypoint /bin/bash <imageID>
la source
Essaye ça:
Source: https://docs.docker.com/articles/basics/#running-an-interactive-shell
la source
root@42f1e37bd0e5:/#
root@665b4a1e17b6:/#
Sur la base de la réponse de @ Timur, j'ai créé le script suivant:
Installer
Mettez le
docker-ssh
fichier dans votre$PATH
avec le contenu suivantRemarque : Certains conteneurs ne contiennent pas
bash
, maisash
,sh
etc. Dans ces cas, ilsbash
doivent être remplacés dans le script ci-dessus.Usage
Si vous n'avez qu'une seule instance en cours d'exécution, lancez simplement
Sinon, fournissez-lui un paramètre d’identificateur de menu fixe que vous obtenez de
docker ps
(première col)la source
Si votre conteneur n'est pas installé sur bash, vous pouvez essayer sh:
Ou cherchez d'abord les coquillages dans / bin:
la source
J'ai créé un serveur SSH conteneurisé qui fournit des fonctionnalités SSH à tout conteneur en cours d'exécution. Vous n'avez pas besoin de changer votre conteneur. La seule exigence est que le conteneur ait bash.
Si vous avez un conteneur avec le nom 'web-server1'. La commande suivante de docker run démarrera un deuxième conteneur qui fournirait SSH pour le premier conteneur.
Pour plus de pointeurs, consultez https://github.com/jeroenpeeters/docker-ssh
la source
@jpetazzo a un post génial à ce sujet . La réponse courte serait d'utiliser
nsenter
:PS: N'oubliez pas de vérifier la discussion dans les commentaires du message ...
À votre santé
la source
docker exec
solution de @ WiR3D est plutôt plus pratique.Vous pouvez également attribuer au conteneur Docker une adresse IP routable avec Pipework, puis SSH dans la machine avec cette nouvelle adresse IP.
Ce sera plus "traditionnel" (ssh), au lieu d'utiliser une commande spécifique à l'application telle que
docker attach
, et le rendra éventuellement plus "portable" entre systèmes et versions.la source
Parfois, il sera utile de pouvoir insérer un conteneur Docker dans un conteneur Docker, en particulier pendant le développement. L'image Docker suivante permet de ssh dans un conteneur en utilisant une clé privée:
UbuntuWithSSH-Docker
L'essentiel du fichier de docker est https://gist.github.com/devbkhadka/98792f7bca57f9778793b2db758b3d07 .
la source
Cela marche :-)
la source
ALLER À L'INTÉRIEUR
Installez l'
goinside
outil de ligne de commande avec:et entrez dans un conteneur de menu fixe avec une taille de terminal appropriée avec:
pour plus de détails, consultez ceci .
la source
Pour bash dans un conteneur en cours d'exécution, tapez ceci:
la source
Juste pour informations. Si vous devez vous connecter à un conteneur simple qui n'est pas un démon, vous devez utiliser les commandes suivantes:
la source
Si le conteneur est arrêté, comme par exemple un conteneur de données uniquement, une bonne solution consiste à exécuter un conteneur jetable à chaque fois que vous souhaitez attacher le conteneur de données. Dans ce cas, le conteneur de données lui-même pourrait être entièrement vide, car le conteneur temporaire disposerait des outils du système d'exploitation.
la source