2017-04-08 1 views
0

Je cours mon conteneur docker avec:Comment faire fonctionner mon docker sshd serveur sans-mot de passe?

docker run -d sequenceiq/hadoop-docker:2.6.0 

Le Dockerfile is here.

Une fois lancé sur mon mac - je suis en docker ps et obtenir:

6bfa4f2fd3b5  sequenceiq/hadoop-docker:2.6.0 "/etc/bootstrap.sh -d" 4 minutes ago  Up 4 minutes  22/tcp, 8030-8033/tcp, 8040/tcp, 8042/tcp, 8088/tcp, 49707/tcp, 50010/tcp, 50020/tcp, 50070/tcp, 50075/tcp, 50090/tcp kind_hawking 

Je suis en

ssh -v localhost -p 22 

et je reçois

OpenSSH_7.4p1, LibreSSL 2.5.0 
debug1: Reading configuration data /Users/User/.ssh/config 
debug1: Reading configuration data /etc/ssh/ssh_config 
debug1: Connecting to localhost [::1] port 22. 
debug1: connect to address ::1 port 22: Connection refused 
debug1: Connecting to localhost [127.0.0.1] port 22. 
debug1: connect to address 127.0.0.1 port 22: Connection refused 
ssh: connect to host localhost port 22: Connection refused 

Hypothèses: Je pense que ce n'est pas un doublon des autres questions centos sshd car il s'agit d'un cent différent Version OS. (Pour ceux qui sont similaires - il fait ce que la question potentiellement similaire demande et ça ne marche pas).

Ma question est: Comment faire fonctionner mon docker sosd sshd passwordless server?


Edit: a été super @ Andrew-utile pour me aider à affiner ma question - donc voilà.

Voici ma mise à jour Dockerfile

DE sequenceiq/Hadoop-docker: 2.6.0

CMD ["/etc/bootstrap.sh", "-d"] 

# Hdfs ports 
EXPOSE 50010 50020 50070 50075 50090 8020 9000 
# Mapred ports 
EXPOSE 10020 19888 
#Yarn ports 
EXPOSE 8030 8031 8032 8033 8040 8042 8088 
#Other ports 
EXPOSE 49707 2122 

EXPOSE 9000 

EXPOSE 2022 

Maintenant, je suis avec la construction de cette:

sudo docker build -t my-hdfs . 

Je suis en cours d'exécution ceci avec:

sudo docker run -d -p my-hdfs 

Ensuite, je vérifie les processus avec:

sudo docker ps 

avec un résultat comme:

d9c9855cfaf0  my-hdfs    "/etc/bootstrap.sh -d" 2 minutes ago  
Up 2 minutes  0.0.0.0:32801->22/tcp, 0.0.0.0:32800->2022/tcp, 
0.0.0.0:32799->2122/tcp, 0.0.0.0:32798->8020/tcp, 0.0.0.0:32797->8030/tcp, 
0.0.0.0:32796->8031/tcp, 0.0.0.0:32795->8032/tcp, 0.0.0.0:32794->8033/tcp, 
0.0.0.0:32793->8040/tcp, 0.0.0.0:32792->8042/tcp, 0.0.0.0:32791->8088/tcp, 
0.0.0.0:32790->9000/tcp, 0.0.0.0:32789->10020/tcp, 0.0.0.0:32788->19888/tcp, 
0.0.0.0:32787->49707/tcp, 0.0.0.0:32786->50010/tcp, 0.0.0.0:32785->50020/tcp, 
0.0.0.0:32784->50070/tcp, 0.0.0.0:32783->50075/tcp, 0.0.0.0:32782->50090/tcp 
agitated_curran 

ensuite pour obtenir l'adresse IP que je suis en cours d'exécution:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' d9c9855cfaf0 

avec le résultat comme

172.17.0.3 

Ensuite, je teste avec:

ssh -v 172.17.0.3 -p 32800 

Cela donne un résultat:

OpenSSH_7.4p1, LibreSSL 2.5.0 
debug1: Reading configuration data /Users/User/.ssh/config 
debug1: Reading configuration data /etc/ssh/ssh_config 
debug1: Connecting to 172.17.0.3 [172.17.0.3] port 32800. 

debug1: connect to address 172.17.0.3 port 32800: Operation timed out 
ssh: connect to host 172.17.0.3 port 32800: Operation timed out 

Ma question est: Comment obtenir mon CentOS docker sshd serveur en cours d'exécution passwordless?

Répondre

3

Vous essayez de vous connecter au serveur ssh local au lieu du conteneur.Pour vous connecter à n'importe quel port à l'intérieur du conteneur, vous devez l'exposer et le publier et éventuellement le mapper à un autre, en particulier lorsque vous souhaitez exécuter plusieurs conteneurs similaires sur des ports différents sur le même hôte. Voir Expose.

Donc dans votre cas votre commande doit être

docker run -p 2222:22 -d sequenceiq/hadoop-docker:2.6.0 

Et commande ssh

ssh -v localhost -p 2222 

Révéler port docker (comme on le voit dans votre fichier docker lié) rend accessible à d'autres conteneurs de docker, mais pas à votre machine hôte. Pour comprendre la différence entre les ports exposés et publiés, voir this question

Cependant, lorsque j'ai essayé de me connecter au port 2222, cela n'a pas fonctionné. En regardant Dockerfile de la version 2.6.0, j'ai trouvé qu'il a un bug, où sshd configuré pour écouter sur le port 2122, mais le port exposé est 22, comme on peut le voir here. En outre, lorsque je tente de créer un dernier Dockerfile que vous avez fourni, il échoue à l'étape 31, vous pouvez donc vouloir l'inverser davantage.

Modifier après la mise à jour de la question:

Regardez sortie docker ps que vous avez fourni, et Dockerfile. Sshd configuré pour écouter sur le port 2122 (si vous ne l'avez pas changé mais puisque nous n'avons pas dockerfile complet de la vôtre), et de la production, nous voyons

0.0.0.0:32799->2122/tcp 
0.0.0.0:32800->2022/tcp 

Vous devez vous connecter comme ssh -v localhost -p 32799 au lieu de 32800 depuis rien n'écoute sur le port 2022 à l'intérieur du conteneur

+0

Merci - c'était super utile - J'ai mis à jour la question en fonction de vos commentaires – hawkeye