docker – 组成networking/端口处理

我有两个组件: hbas和ookeeper作为单个容器和hbase-printer(我的java代码)在我的主机。 我的目标是打印一些hbase表的内容。 问题是,连接到2181(动物园pipe理员端口)成功,但看起来像我正在指向端随机端口进行通信,这个端口是不公开的。 我正在使用docker-compose.yml

 version: '2' services: hbase: image: dy1-dockerv2-local.jfrog.io/hbase:latest restart: always hostname: hbase-docker ports: - "60010:60010" - "60000:60000" - "60020:60020" - "60030:60030" - "9095:9095" - "8085:8085" - "8080:8080" - "2181:2181" - "9091:9091" - "9090:9090" expose: - "9091" - "2181" volumes: - ./data/hbase:/data - ./logs/hbase/:/opt/hbase/logs network_mode: "bridge" 

在我的Java日志中,我得到:

 23-02-2017 09:29:54,413 INFO [ClientCnxn]: [main-SendThread(localhost:2181)] Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x15a69d8a7a30006, negotiated timeout = 40000 23-02-2017 09:30:16,955 INFO [HBaseRPC]: [main] Problem connecting to server: hbase-docker/172.17.0.2:39521 

在我的主机上,我可以看到监听端口:

 $ netstat -na | grep LISTEN tcp6 0 0 ::1.2181 *.* LISTEN tcp4 0 0 *.2181 *.* LISTEN tcp6 0 0 ::1.8080 *.* LISTEN tcp4 0 0 *.8080 *.* LISTEN tcp6 0 0 ::1.8085 *.* LISTEN tcp4 0 0 *.8085 *.* 

(以及我在docker-compose.yml文件中定义的其他端口

在容器中我看到:

 root@hbase-docker:/# netstat -na | grep LISTEN tcp6 0 0 172.17.0.2:39521 :::* LISTEN tcp6 0 0 :::2181 :::* LISTEN tcp6 0 0 :::60010 :::* LISTEN tcp6 0 0 172.17.0.2:32785 :::* LISTEN tcp6 0 0 :::43189 :::* LISTEN 

我看到端口39521在容器内部可用,但不暴露给主机。 我不能将它添加到我docker-compose.yml因为它随机更改(看起来像30000-50000之间的东西)。 我怎样才能将随机端口暴露给我的主机?

你最喜欢面对https://issues.apache.org/jira/browse/HBASE-10289 ,它固定在0.99.0和0.98.4。 至于回答的评论,你仍然在一个旧版本的hbase,可能<0.99.0。

您应该尝试使用更新版本的hbase。 例如,您将在Docker Hub上find一个: https : //hub.docker.com/r/dajobe/hbase/