ssh:连接到主机e121a0ef81ef(容器id)端口22:docker中的连接被拒绝

aiazj4mn  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(473)

我有三台安装了docker的主机。我想在三个容器中有一个分布式文件系统hdfs。所以,我要做一个hadoop集群。我使用这个docker文件来制作hadoop映像。

  1. FROM ubuntu_mesos
  2. ENV HADOOP_HOME /opt/hadoop
  3. ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
  4. RUN apt-get update && apt-get install -y ssh rsync vim openjdk-8-jdk
  5. # download and extract hadoop, set JAVA_HOME in hadoop-env.sh, update
  6. path
  7. RUN wget https://archive.apache.org/dist/hadoop/core/hadoop-
  8. 3.1.0/hadoop-3.1.0.tar.gz && tar -xzf hadoop-3.1.0.tar.gz && \
  9. mv hadoop-3.1.0 $HADOOP_HOME && \
  10. echo "export JAVA_HOME=$JAVA_HOME" >> $HADOOP_HOME/etc/hadoop/
  11. hadoop-env.sh && \
  12. echo "PATH=$PATH:$HADOOP_HOME/bin" >> ~/.bashrc
  13. # create ssh keys
  14. RUN ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa && cat ~/.ssh/id_rsa.pub
  15. >> ~/.ssh/authorized_keys && chmod 0600 ~/.ssh/authorized_keys
  16. ADD core-site.xml $HADOOP_HOME/etc/hadoop/
  17. ADD hdfs-site.xml $HADOOP_HOME/etc/hadoop/
  18. ADD mapred-site.xml $HADOOP_HOME/etc/hadoop/
  19. ADD mapred-site.xml $HADOOP_HOME/etc/hadoop/
  20. ADD ssh_config /root/.ssh/config
  21. COPY start-hadoop.sh start-hadoop.sh
  22. EXPOSE 22 9000 8088 50070 50075 50030 50060
  23. RUN echo export HDFS_NAMENODE_USER="root" >>
  24. $HADOOP_HOME/etc/hadoop/hadoop-env.sh
  25. RUN echo export HDFS_DATANODE_USER="root" >>
  26. $HADOOP_HOME/etc/hadoop/hadoop-env.sh
  27. RUN echo export HDFS_SECONDARYNAMENODE_USER="root" >>
  28. $HADOOP_HOME/etc/hadoop/hadoop-env.sh
  29. RUN echo export YARN_RESOURCEMANAGER_USER="root" >>
  30. $HADOOP_HOME/etc/hadoop/hadoop-env.sh
  31. RUN echo export YARN_NODEMANAGER_USER="root" >>
  32. $HADOOP_HOME/etc/hadoop/hadoop-env.sh

在构建docker文件之后。我坐起来 Docker 蜂拥而至。我安装了weave net并制作了一个容器网络,如下所示:

  1. docker plugin install weaveworks/net-plugin:latest_release
  2. docker network create --driver=weaveworks/net-plugin:latest_release
  3. --attachable mycontainernetwork

我连接了三台主机,在每台主机上运行以下命令:

  1. sudo weave launch <IP address of first host> <IP address of second
  2. host>

然后,我在每个主机上使用容器网络运行hadoop映像,如下所示:

  1. sudo docker run -it --net mycontainernetwork my-hadoop

通过在每个容器上运行以下命令,我检查了每个容器是否可以识别其他容器:

  1. ping -c 1 -q ContainerID

但是,当我想运行这个命令时:

  1. ssh e121a0ef81ef

我收到这个错误:
ssh:连接到主机e121a0ef81ef端口22:连接被拒绝
“e121a0ef81ef”是我的容器id。
我很困惑,不知道如何解决这个问题。你能帮帮我吗?
任何帮助都将不胜感激。

ve7v8dk2

ve7v8dk21#

问题解决了。我做了以下几个阶段:首先,我使ssh在三个主机之间无密码。在三个主机中:

  1. ssh-keygen

然后,对于每个从机,我在master中运行以下命令:

  1. ssh-copy-id user@ip

我测试了ssh在主服务器和从服务器之间没有密码的情况下工作。因此,我将“~/.ssh”文件夹从主机复制到每个主机中的容器。顺便说一下,我用这个命令进入容器:

  1. sudo docker run -it -v /home/user/.ssh:/root/.ssh --net mycontainernetwork
  2. --privileged my-hadoop

我调试了ssh以了解问题:

  1. ssh -v user@ip

最重要的一点是,进入容器后,必须使用以下命令重新启动ssh:

  1. /etc/init.d/ssh restart

或者

  1. service ssh restart

此外,必须使用以下命令授予.ssh文件夹权限:

  1. chmod 600 ~/.ssh/*

之后,我可以对远程容器运行ssh命令。
希望对其他人有帮助。

展开查看全部

相关问题