本人有一个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容器的该端口啊
習慣沉默2017-04-25 09:03:31
HDFS ipc 포트가 없다는 것은 sequenceiq/hadoop-docker
이미지 시퀀스iq/hadoop-docker#48의 버그입니다. 수정되었지만(https://github.com/sequenceiq... 참조), 해당 관리자는 새 버전의 이미지를 만들지 않았기 때문에 지금도 사용하는 데 문제가 있습니다
해결책은 매우 간단합니다. docker run
뒤의 매개변수에 -p 9000:9000
을 수동으로 추가하면 됩니다.
그런데 Hadoop 웹사이트에서 sequenceiq/hadoop-docker
docker 이미지를 언급하고 있지만 Dockerfile
글로 볼 때 해당 작성자는 Docker에 대해 피상적으로만 이해하고 있으며 실제로는 Docker의 공식 Dockerfile
모범 사례를 따르지 않습니다. 지침에 따르면 이미지가 매우 부풀어 오르고 잘 만들어지지 않았습니다. 능력이 있다면 공식 모범 사례 지침에 따라 필요한 이미지를 맞춤설정해야 합니다.