ssh: подключиться к хосту e121a0ef81ef (идентификатор контейнера) порт 22: соединение отказано в докере - PullRequest
0 голосов
/ 12 марта 2019

У меня есть три хоста с установленным докером на каждом из них. Я хочу иметь распределенную файловую систему 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 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: подключение к хосту e121a0ef81ef порт 22: соединение отклонено

"e121a0ef81ef" - это мой контейнерный идентификатор.

Я запутался и не знаю, как решить проблему. Не могли бы вы помочь мне?

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 17 марта 2019

Проблема решена.Я сделал эти этапы: во-первых, я сделал ssh без пароля среди трех хостов.На трех хостах:

 ssh-keygen

Затем для каждого ведомого я запустил эту команду в Master:

 ssh-copy-id user@ip

Я проверил, что ssh работает без пароля между Masterи рабы.Поэтому я скопировал папку «~ / .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 для удаленного контейнера.

Надеюсь, это было полезно для других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...