ssh:连接到主机e121a0ef81ef(容器ID)端口22:泊坞窗中的连接被拒绝

时间:2019-03-12 10:45:10

标签: docker hadoop weave

我有三台主机,每台主机上都安装了docker。我想在三个容器之间有一个分布式文件系统HDFS。所以,我必须制作一个Hadoop集群。我使用此docker文件制作hadoop映像。

cache

构建docker文件后。我在您的主机上坐了码头工人。我安装了编织网并建立了一个如下的容器网络:

awk '$0 ~ keyword1 "|" keyword2 "|" keyword3 {
  if ($0 ~ keyword1 && k1 == 0) { tbp=1; k1=1 }
  if ($0 ~ keyword2 && k2 == 0) { tbp=1; k2=1 }
  if ($0 ~ keyword3 && k3 == 0) { tbp=1; k3=1 }
  if (tbp == 1) { print ; tbp=0 }
  if ( k1+k2+k3 >= 3 ) exit
}' keyword1=" my key " keyword2="car" keyword3="bathroom" ./filename

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

FROM ubuntu_mesos
ENV HADOOP_HOME /opt/hadoop
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
RUN apt-get update && apt-get install -y ssh rsync vim openjdk-8-jdk
# download and extract hadoop, set JAVA_HOME in hadoop-env.sh, update 
path
RUN wget https://archive.apache.org/dist/hadoop/core/hadoop- 
3.1.0/hadoop-3.1.0.tar.gz && tar -xzf hadoop-3.1.0.tar.gz && \
mv hadoop-3.1.0 $HADOOP_HOME && \
echo "export JAVA_HOME=$JAVA_HOME" >> $HADOOP_HOME/etc/hadoop/
hadoop-env.sh && \
echo "PATH=$PATH:$HADOOP_HOME/bin" >> ~/.bashrc
# create ssh keys
RUN ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa && cat ~/.ssh/id_rsa.pub 
>> ~/.ssh/authorized_keys && chmod 0600 ~/.ssh/authorized_keys
ADD core-site.xml $HADOOP_HOME/etc/hadoop/
ADD hdfs-site.xml $HADOOP_HOME/etc/hadoop/
ADD mapred-site.xml $HADOOP_HOME/etc/hadoop/
ADD mapred-site.xml $HADOOP_HOME/etc/hadoop/
ADD ssh_config /root/.ssh/config
COPY start-hadoop.sh start-hadoop.sh
EXPOSE 22 9000 8088 50070 50075 50030 50060
RUN echo export HDFS_NAMENODE_USER="root" >> 
$HADOOP_HOME/etc/hadoop/hadoop-env.sh 
RUN echo export HDFS_DATANODE_USER="root" >> 
$HADOOP_HOME/etc/hadoop/hadoop-env.sh
RUN echo export HDFS_SECONDARYNAMENODE_USER="root" >> 
$HADOOP_HOME/etc/hadoop/hadoop-env.sh
RUN echo export YARN_RESOURCEMANAGER_USER="root" >> 
$HADOOP_HOME/etc/hadoop/hadoop-env.sh
RUN echo export YARN_NODEMANAGER_USER="root" >> 
$HADOOP_HOME/etc/hadoop/hadoop-env.sh

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

docker plugin install weaveworks/net-plugin:latest_release
docker network create --driver=weaveworks/net-plugin:latest_release 
--attachable mycontainernetwork

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

sudo weave launch <IP address of first host> <IP address of second 
host>

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

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

我收到此错误:

  
    

ssh:连接到主机e121a0ef81ef端口22:连接被拒绝

  

“ e121a0ef81ef”是我的容器ID。

我很困惑,不知道如何解决问题。你能帮我吗?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

问题解决了。我做了这些阶段: 首先,我使ssh在三台主机之间没有密码。 在三位主持人中:

 ssh-keygen

然后,对于每个从属,我在主服务器中运行以下命令:

 ssh-copy-id user@ip

我测试了 ssh 在主机和从机之间无需密码即可工作。因此,我将“〜/ .ssh”文件夹从主机复制到每个主机中的容器。顺便说一下,我使用以下命令进入了容器:

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

我调试了ssh以了解该问题:

ssh -v user@ip

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

  /etc/init.d/ssh restart 

  service ssh restart

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

chmod 600 ~/.ssh/*

之后,我可以运行 ssh 命令到远程容器。

希望对其他人有帮助。