Comment obtenir la connexion ssh avec Docker container sur OSX(boot2docker)

j'utilise docker sur OSX avec boot2docker.

je veux obtenir une connexion Ssh à partir de mon terminal dans un conteneur courant.

Mais je ne peux pas le faire :(

je pense que C'est parce que Docker tourne dans une machine virtuelle.

16
demandé sur errordeveloper 2014-04-11 17:55:50

4 réponses

il y a plusieurs choses que vous devez faire pour activer ssh'ING sur un conteneur tournant dans une VM:

  1. installer et exécuter sshd dans votre conteneur (exemple). sshd n'est pas là par défaut parce que les conteneurs n'exécutent généralement qu'un seul processus, bien qu'ils puissent en exécuter autant que vous le souhaitez.
  2. EXPOSE un port dans le cadre de la création de l'image, typiquement 22, de sorte que lorsque vous exécutez le conteneur, le démon se connecte au
  3. Lorsque vous exécutez le conteneur, vous devez décider comment mapper le port. Vous pouvez laisser Docker faire automatiquement ou être explicite. Je suggère d'être explicite:docker run -p 42222:22 ... qui correspond au port 42222 sur la VM au port 22 dans le conteneur.
  4. Ajouter un portmap à la VM pour exposer le port à votre hôte. par exemple, lorsque votre VM n'est pas en cours d'exécution, vous pouvez ajouter un mapping comme ceci:VBoxManage modifyvm "boot2docker-vm" --natpf1 "containerssh,tcp,,42222,,42222"

Puis, à partir de votre host, vous devriez être en mesure de SSH au port 42222 sur le host pour atteindre le démon SSH du conteneur.

Voici ce qui se passe quand j'ai effectuer les étapes ci-dessus:

$ VBoxManage modifyvm "boot2docker-vm" --natpf1 "containerssh,tcp,,42222,,42222"
$ ./boot2docker start
[2014-04-11 12:07:35] Starting boot2docker-vm...
[2014-04-11 12:07:55] Started.
$ docker run -d -p 42222:22 dhrp/sshd
Unable to find image 'dhrp/sshd' (tag: latest) locally
Pulling repository dhrp/sshd
2bbfe079a942: Download complete 
c8a2228805bc: Download complete 
8dbd9e392a96: Download complete 
11d214c1b26a: Download complete 
27cf78414709: Download complete 
b750fe79269d: Download complete 
cf7e766468fc: Download complete 
082189640622: Download complete 
fa822d12ee30: Download complete 
1522e919ec9f: Download complete 
fa594d99163a: Download complete 
1bd442970c79: Download complete 
0fda9de88c63: Download complete 
86e22a5fdce6: Download complete 
79d05cb13124: Download complete 
ac72e4b531bc: Download complete 
26e4b94e5a13b4bb924ef57548bb17ba03444ca003128092b5fbe344110f2e4c
$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                   NAMES
26e4b94e5a13        dhrp/sshd:latest    /usr/sbin/sshd -D      6 seconds ago       Up 3 seconds        0.0.0.0:42222->22/tcp   loving_einstein     
$ ssh root@localhost -p 42222
The authenticity of host '[localhost]:42222 ([127.0.0.1]:42222)' can't be established.
RSA key fingerprint is ....
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[localhost]:42222' (RSA) to the list of known hosts.
root@localhost's password: screencast
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.12.1-tinycore64 x86_64)

 * Documentation:  https://help.ubuntu.com/

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

root@26e4b94e5a13:~# exit
logout

ce qui indique ssh - > localhost 42222->VM port 42222 - > container port 22.

32
répondu Andy 2014-04-11 19:25:06

Docker a ajouté docker exec commande à Docker 1.3.0. Vous pouvez vous connecter à l'exécution d'un conteneur à l'aide de la commande suivante:

docker exec -it <container id> /bin/bash

qui se connecte à une invite de bash sur le conteneur en cours d'exécution.

32
répondu user848337 2015-04-17 20:25:02

Si vous voulez juste entrer dans la course conteneur, vous pouvez envisager d'utiliser nsenter. Voici un simple script bash ( suggérée par Chris Jones) que vous pouvez utiliser pour entrer dans un conteneur docker. Sauvegarder quelque part dans votre $PATH comme docker-entrer et chmod +x

#!/bin/bash
set-e
# Check for nsenter. If not found, install it
boot2docker ssh '[ -f /var/lib/boot2docker/nsenter ] || docker run --rm -v /var/lib/boot2docker/:/target jpetazzo/nsenter'
# Use bash if no command is specified
args=$@
if[[ $# = 1 ]]; then
    args+=(/bin/bash)
fi

boot2docker ssh -t sudo /var/lib/boot2docker/docker-enter "${args[@]}"

Ensuite, vous pouvez exécuter docker-enter 89af3d (ou n'importe quelle configuration que vous voulez entrer)

1
répondu Michael_Scharf 2014-10-01 20:04:33

une variante légèrement modifiée de la réponse de Michael qui nécessite que le conteneur que vous voulez entrer soit nommé (APPNAME):

boot2docker ssh '[ -f /var/lib/boot2docker/nsenter ] || docker run --rm -v /var/lib/boot2docker/:/target jpetazzo/nsenter'

boot2docker ssh -t sudo /var/lib/boot2docker/docker-enter $(docker ps | grep $APPNAME | awk '{ print  }')
0
répondu Barrett Clark 2014-10-19 01:33:17