Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ssh:连接到主机e121a0ef81ef(容器id)端口22:docker中的连接被拒绝_Docker_Hadoop_Weave - Fatal编程技术网

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

ssh:连接到主机e121a0ef81ef(容器id)端口22:docker中的连接被拒绝,docker,hadoop,weave,Docker,Hadoop,Weave,我有三台主机,每个主机上都安装了docker。我希望在三个容器中有一个分布式文件系统HDFS。所以,我必须制作一个hadoop集群。我使用这个docker文件制作hadoop映像 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 ope

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

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
在构建docker文件之后。我坐了起来,码头工人蜂拥而至。我安装了weave net,并制作了如下容器网络:

docker plugin install weaveworks/net-plugin:latest_release
docker network create --driver=weaveworks/net-plugin:latest_release 
--attachable mycontainernetwork
 sudo docker run -it --net mycontainernetwork my-hadoop
我通过在每台主机上运行此命令连接了三台主机:

sudo weave launch <IP address of first host> <IP address of second 
host>
通过在每个容器上运行以下命令,我检查了每个容器是否可以识别其他容器:

 ping -c 1 -q ContainerID
但是,当我要运行此命令时:

 ssh e121a0ef81ef
我收到这个错误:

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

“e121a0ef81ef”是我的容器ID

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


任何帮助都将不胜感激

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

 ssh-keygen
然后,对于每个从机,我在Master中运行以下命令:

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

sudo docker run -it -v /home/user/.ssh:/root/.ssh --net mycontainernetwork
 --privileged my-hadoop
  /etc/init.d/ssh restart 
chmod 600 ~/.ssh/*
我调试了ssh以了解问题:

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

sudo docker run -it -v /home/user/.ssh:/root/.ssh --net mycontainernetwork
 --privileged my-hadoop
  /etc/init.d/ssh restart 
chmod 600 ~/.ssh/*

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

sudo docker run -it -v /home/user/.ssh:/root/.ssh --net mycontainernetwork
 --privileged my-hadoop
  /etc/init.d/ssh restart 
chmod 600 ~/.ssh/*
之后,我可以对远程容器运行ssh命令


希望对其他人有帮助。

您的容器中是否运行了
ssh
服务?@thomaslevel,当我在容器上运行“ssh start”时,我遇到以下错误:无法解析主机名start:名称解析暂时失败。