如何让我的hdfsdocker客户端运行?

我正在启动一个hdfs服务器 :

docker run -d sequenceiq/hadoop-docker:2.6.0 

我正在观察正在运行的docker进程

 docker ps 

得到以下结果:

 6bfa4f2fd3b5 sequenceiq/hadoop-docker:2.6.0 "/etc/bootstrap.sh -d" 31 minutes ago Up 31 minutes 22/tcp, 8030-8033/tcp, 8040/tcp, 8042/tcp, 8088/tcp, 49707/tcp, 50010/tcp, 50020/tcp, 50070/tcp, 50075/tcp, 50090/tcp kind_hawking 

我试图通过hdfs连接到我的docker集装箱:

 sudo docker run -ti davvdg/hdfs-client hadoop fs -fs hdfs://localhost:50075 -ls / 

这给出了以下结果:

 ls: Call From a48f81b8e1bb/172.17.0.3 to localhost:50075 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused 

我的问题是: 如何让我的hdfsdocker客户端运行?


编辑:感谢从@shizhz一些有用的反馈我正在更新的问题。

这是我的Dockerfile

 FROM sequenceiq/hadoop-docker:2.6.0 CMD ["/etc/bootstrap.sh", "-d"] # Hdfs ports EXPOSE 50010 50020 50070 50075 50090 8020 9000 # Mapred ports EXPOSE 10020 19888 #Yarn ports EXPOSE 8030 8031 8032 8033 8040 8042 8088 #Other ports EXPOSE 49707 2122 EXPOSE 9000 EXPOSE 2022 

以下是我如何构build图像:

  sudo docker build -t my-hdfs . 

这是我如何运行图像:

 sudo docker run -d -p my-hdfs 

这是我如何检查过程:

 sudo docker ps 

结果如下:

 d9c9855cfaf0 my-hdfs "/etc/bootstrap.sh -d" 2 minutes ago Up 2 minutes 0.0.0.0:32801->22/tcp, 0.0.0.0:32800->2022/tcp, 0.0.0.0:32799->2122/tcp, 0.0.0.0:32798->8020/tcp, 0.0.0.0:32797->8030/tcp, 0.0.0.0:32796->8031/tcp, 0.0.0.0:32795->8032/tcp, 0.0.0.0:32794->8033/tcp, 0.0.0.0:32793->8040/tcp, 0.0.0.0:32792->8042/tcp, 0.0.0.0:32791->8088/tcp, 0.0.0.0:32790->9000/tcp, 0.0.0.0:32789->10020/tcp, 0.0.0.0:32788->19888/tcp, 0.0.0.0:32787->49707/tcp, 0.0.0.0:32786->50010/tcp, 0.0.0.0:32785->50020/tcp, 0.0.0.0:32784->50070/tcp, 0.0.0.0:32783->50075/tcp, 0.0.0.0:32782->50090/tcp agitated_curran 

以下是我如何获取IP地址:

 docker inspect --format '{{ .NetworkSettings.IPAddress }}' d9c9855cfaf0 

结果如下:

 172.17.0.3 

以下是我如何运行testing:

 sudo docker run --rm sequenceiq/hadoop-docker:2.6.0 /usr/local/hadoop-2.6.0/bin/hadoop fs -fs hdfs://192.168.0.3:9000 -ls / 

结果如下:

 17/04/08 19:51:54 INFO ipc.Client: Retrying connect to server: 192.168.0.3/192.168.0.3:9000. Already tried 0 time(s); maxRetries=45 ls: Call From fafcd377f4a0/172.17.0.2 to 192.168.0.3:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused 

我的问题是: 如何让我的hdfsdocker客户端运行?

默认情况下,每个容器将使用bridgenetworking驱动程序,并具有自己的隔离networking环境。 这是不一样的,但你可以简单地认为他们是不同的服务器,并有自己的私人IP地址。 所以当你启动一个客户端容器并尝试连接地址hdfs://localhost:50075 ,它实际上会尝试连接自己的端口50075 ,而不是连接hadoop服务器容器,显​​然这个容器会被拒绝。 请参阅他们的官方networking文档了解更多信息。

同一主机上的容器可以通过其私有IP进行通信,因此要连接到您的hadoop服务器容器,您可以通过以下方式首先find它的私有IP:

 $> docker inspect --format '{{ .NetworkSettings.IPAddress }}' 378 192.168.0.2 

然后我可以使用客户端(我认为该端口应该是9000):

 $> docker run --rm sequenceiq/hadoop-docker:2.6.0 /usr/local/hadoop-2.6.0/bin/hadoop fs -fs hdfs://192.168.0.2:9000 -ls / Found 1 items drwxr-xr-x - root supergroup 0 2015-01-15 04:04 /user 

如果你想在另一台主机上运行客户端容器,那么你需要知道多主机networking 。