hbase+testcontainers-端口重新Map

pexxcrt2  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(270)

我正在尝试使用测试容器对docker容器中启动的hbase运行集成测试。我遇到的问题可能与客户机如何与hbase交互有关。
当hbase主机在容器中启动时,它存储其hostname:port in 以便客户能找到它。在这种情况下,它存储“localhost:16000".
在容器外运行的测试用例中,客户端检索“localhost:16000无法连接。连接失败,因为testcontainers已将该端口重新Map到16000以外的其他随机端口。
有什么办法克服这个问题吗?
(1) 一个想法是找到一种方法来告诉hbase客户机使用重新Map的端口,忽略它从zookeeper检索到的值,但是我还没有找到一种方法来做到这一点。
(2) 如果我能让hbase主机写外部可访问的host:port in Zookeeper也可以解决这个问题。但我不相信容器本身对测试容器如何进行端口重新Map有任何了解。
(3) 也许测试容器为这种情况提供了不同的解决方案?

ztmd8pv5

ztmd8pv51#

您可以看看kafkancontainer的实现,我们首先启动一个socat(fastcproxy)容器来获取一个半随机端口,然后使用它来配置目标容器。
算法是:
doStart ,首先以原始容器的网络别名和端口(如12345)为目标启动socat
获取Map端口(类似32109,指向12345)
使原始容器(例如带有环境变量)在原始容器之外使用Map的端口,或者,如果只能配置一个端口,请参阅couchbasecontainer以获取更高级的选项
将socat的主机和端口返回给客户端

相关问题