本人有一個3節點hadoop, 啟動了3個docker容器, 眾所周知, docker容器內服務的端口是可以映射到宿主機的端口的, 我採用-P將容器的所有端口映射到主機端口, 命令如下:
docker run -it -v /Users/yc/hadoop/docker:/test -P -h h1 --name h1 sequenceiq/hadoop-docker /etc/bootstrap.sh -bash
這是第master節點的啟動腳本, 映射了一個宿主機目錄, 映射了所有容器端口到宿主機, 而且設置了容器的hostname
當我查看進程的時候
docker ps
結果如下, 我做了下美化:
b96b897c6532 sequenceiq/hadoop-docker "/etc/bootstrap.sh -b"
24 minutes ago Up 24 minutes
0.0.0.0:32797->2122/tcp,
0.0.0.0:32796->8030/tcp,
0.0.0.0:32795->8031/tcp,
0.0.0.0:32794->8032/tcp,
0.0.0.0:32793->8033/tcp,
0.0.0.0:32792->8040/tcp,
0.0.0.0:32791->8042/tcp,
0.0.0.0:32790->8088/tcp,
0.0.0.0:32789->19888/tcp,
0.0.0.0:32788->49707/tcp,
0.0.0.0:32787->50010/tcp,
0.0.0.0:32786->50020/tcp,
0.0.0.0:32785->50070/tcp,
0.0.0.0:32784->50075/tcp,
0.0.0.0:32783->50090/tcp
h1
我們常用的50070和8088都映射出來了, 但是9000沒有, 我知道9000這個協議是hdfs, 可能不屬於tcp, 那麼如何在我宿主機訪問啊
我想用IDEA開發hadoop的java程序, 輸入輸出目錄都得是hdfs:ip:9000/目錄這種形式的, 不知道如何存取docker容器的該連接埠啊
缺乏HDFS ipc 連接埠是
解決方法很簡單,在sequenceiq/hadoop-docker
映像的一個bug sequenceiq/hadoop-docker#48,雖然已經修復(見: https://github.com/sequenceiq...,但是其維護者一直沒有構建新版本的鏡像,從而導致你現在使用依然有問題。即可。
順便說一句,雖然Hadoop 網站有提及docker run
后面的参数上手动加上-p 9000:9000
這個docker 鏡像,但是從其
Dockerfile
的撰寫情況看,其作者對Docker 理解很膚淺,並沒有遵循Docker官方的Dockerfile
最佳實務準則,鏡像非常臃腫,製作的並不好。如果有能力應該自己遵循官方最佳實踐準則來客製化自己所需的鏡像。sequenceiq/hadoop-docker
这个 docker 镜像,但是从其Dockerfile
的撰写情况看,其作者对 Docker 理解很肤浅,并没有遵循Docker官方的Dockerfile