Наменод не доступен снаружи контейнера Docker - PullRequest
0 голосов
/ 12 апреля 2019

Я докертизировал приложение Hadoop и пытаюсь получить доступ к namenode извне контейнера по очевидным причинам.

Я открыл порт с помощью Dockerfile, используя:

EXPOSE 2122 9000

ИЯ запускаю контейнер с:

$ docker run -dit --rm --privileged --pid=host -p 2122:2122 -p 9000:9000 --name hnode ns/hnode

2122 beign порт, который я использую для SSH.Я уже установил сервер SSH, попробовал его и Я смог подключиться через SSH извне контейнера .

Я также добавил в Hadoop возможность использовать этот порт SSH вместо ENV HADOOP_SSH_OPTS="-p 2122".


Используя следующий файл core-site.xml:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

Когда я пытаюсь телнет 9000 изнутри контейнера, все в порядке:

[hadoop@1f5c7934fe45 hadoop]$ telnet localhost 9000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

   |��☼►☻↑      ")org.apache.hadoop.ipc.RPC$VersionMismatch*>Server IPC version 9 cannot communicate with client version 130♫: @☺Connection closed by foreign host.

И вы ясно видите, что это наменод на другом конце.

Но когда я пытаюсь подключиться через порт 9000, используемый наменодом, изнутри контейнера, используя хост ip, я получаю:

[hadoop@1f5c7934fe45 hadoop]$ telnet 172.17.0.2 9000
Trying 172.17.0.2...
telnet: connect to address 172.17.0.2: Connection refused

Даже если SSH работает:

[hadoop@1f5c7934fe45 hadoop]$ telnet 172.17.0.2 2122
Trying 172.17.0.2...
Connected to 172.17.0.2.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4

Protocol mismatch.
Connection closed by foreign host.

Почему работает SSH, а не namenode Hadoop?

1 Ответ

0 голосов
/ 12 апреля 2019

На самом деле мне просто нужно было поместить IP-адрес хоста в core-site.xml вместо localhost:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://172.17.0.2:9000</value>
    </property>
</configuration>

Таким образом, я смог соединить наменод изнутри с внешним маршрутом:

[hadoop@1f5c7934fe45 hadoop]$ telnet 172.17.0.2 9000
Trying 172.17.0.2...
Connected to 172.17.0.2.
Escape character is '^]'.

   |��☼►☻↑      ")org.apache.hadoop.ipc.RPC$VersionMismatch*>Server IPC version 9 cannot communicate with client version 100♫: @☺Connection closed by foreign host.

И даже извне:

λ curl 192.168.56.1:9000
It looks like you are making an HTTP request to a Hadoop IPC port. This is not the correct port for the web interface on this daemon.

Я знаю, что это ошибки, но они подтверждают, что демон ответил и доступен.

...