ssh:连接到主机 e121a0ef81ef(容器 ID)端口 22:连接在 docker 中被拒绝
ssh: connect to host e121a0ef81ef(container id) port 22: Connection refused in docker
我有三台主机,每台主机都安装了 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 蜂拥而至。我安装了 weave net 并制作了一个这样的容器网络:
docker plugin install weaveworks/net-plugin:latest_release
docker network create --driver=weaveworks/net-plugin:latest_release
--attachable mycontainernetwork
我在每台主机上使用 运行ning 这条命令连接了三台主机:
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。我想在三个容器之间有一个分布式文件系统,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 蜂拥而至。我安装了 weave net 并制作了一个这样的容器网络:
docker plugin install weaveworks/net-plugin:latest_release
docker network create --driver=weaveworks/net-plugin:latest_release
--attachable mycontainernetwork
我在每台主机上使用 运行ning 这条命令连接了三台主机:
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 命令到远程容器。
希望对其他人有所帮助。