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

标签 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 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文件之后。我在你的主机上坐了 docker 。我安装了编织网并建立了一个如下的容器网络:
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>

然后,我在每个主机上使用容器网络运行hadoop图像,如下所示:
 sudo docker run -it --net mycontainernetwork my-hadoop

我检查了每个容器是否可以在每个容器上运行以下命令来识别其他容器:
 ping -c 1 -q ContainerID

但是,当我想运行以下命令时:
 ssh e121a0ef81ef

我收到此错误:

ssh: connect to host e121a0ef81ef port 22: Connection refused



“e121a0ef81ef”是我的容器ID。

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

任何帮助,将不胜感激。

最佳答案

问题解决了。我做了这些阶段:
首先,我使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 命令。

希望它对其他人有帮助。

关于docker - ssh:连接到主机e121a0ef81ef(容器ID)端口22: docker 中的连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55119564/

相关文章:

hadoop - Sqoop - 是否可以在 HDFS 中导入平面文件

hadoop - Sqoop 导入没有分割

hadoop - 如何在Linux机器中将文本文件加载到Hbase中

networking - 级别=致命的消息=“ipset [destroy] failed: ipset v6.29: Set cannot be destroyed: it is in use by a kernel component\n: exit status 1”

kubernetes - kubeadm和weave无法一起工作

python - 在 Alpine Linux 中使用 apk 安装的 Python 包

docker - jest --watch 抛出错误 : EACCES: permission denied for directory owned by root

node.js - Node/NPM 可以并且应该在单独的容器中用于 dockerized PHP 应用程序

docker - 尝试在Kubuntu 16.04上安装Docker的问题

networking - 使用docker的weave网络驱动插件配置多个网络时出错