在不修改 hosts 文件的前提下,如何让自定义 host 地址映射到某个 IP

2021-07-07 14:03:39 +08:00
 429463267

背景:
我在使用 scala 编写一个单元测试,要求自动化的完成写入和读取 Docker 环境下的 Hbase 。
这个是我自己编译的 https://hub.docker.com/r/geekyouth/hbase

启动参数:
docker run -d --name hbase --hostname hbase -p 2181:2181 -p 16000:16000 -p 16010:16010 -p 16020:16020 geekyouth/hbase:2.3.3

其中,连接 Hbase 的参数包含如下:
hbase.master: 127.0.0.1:16010
hbase.zookeeper.quorum: 127.0.0.1
hbase.zookeeper.property.clientPort: 2181
zookeeper.znode.parent: /hbase


必须在 hosts 文件配置如下,才能正常连接 hbase 读写:
127.0.0.1 hbase


现在的需求是,不允许修改 hosts 文件,如何实现本地开发机器上运行单元测试来读写 docker 容器中的 hbase ?

背景知识:
https://xinze.fun/2019/11/20/%E4%BD%BF%E7%94%A8Docker%E6%90%AD%E5%BB%BA%E4%BC%AA%E5%88%86%E5%B8%83%E5%BC%8FHbase-%E5%A4%96%E7%BD%AEZookeeper/

Hbase 的通信机制,其连接 Regionserver 是通过 Hostname:Port 的形式来连接的,zookeeper 返回的地址就是( Hostname:Port:startID )的格式,可以在 zk 上面找到( list /hbase/rs )。因此如果我们使用的是 Docker 容器本身 hostname,显然是无法通过客户端连接到 Hbase 的。

827 次点击
所在节点    问与答
5 条回复
429463267
2021-07-07 14:04:26 +08:00
求助
InDom
2021-07-07 14:10:53 +08:00
使用自己注册的域名,然后解析道对应的 IP 。

很多人以为 公共 DNS 只能解析到公网,其实解析到 127.0.0.1 之类的内网是可以的。

但是 这个 host 域得能自定义。

如果连域也不能改,那就考虑下自建 DNS ?
429463267
2021-07-07 14:28:52 +08:00
javahost(JVM 虚拟 DNS)解决 hosts 程序中 hosts 配置问题_eff666 的博客-CSDN 博客_javahost
https://blog.csdn.net/eff666/article/details/52061223

刚才无意间看到这篇文章,正在尝试使用 虚拟 DNS
429463267
2021-07-07 14:30:02 +08:00
@InDom 公司之所以需要使用 docker hbase,目的就是省钱,所以不可能在开发环境去注册一个域名来完成单元测试的。
429463267
2021-07-07 14:51:53 +08:00
```scala
private[this] def updateVDNS() = {
val props = new Properties
props.put("hbase", "127.0.0.1")
JavaHost.updateVirtualDns(props)
}
}


```

实测可行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/788072

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX