V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
429463267
V2EX  ›  问与答

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

  •  
  •   429463267 · 2021-07-07 14:03:39 +08:00 · 890 次点击
    这是一个创建于 1228 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:
    我在使用 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 的。

    5 条回复    2021-07-07 14:51:53 +08:00
    429463267
        1
    429463267  
    OP
       2021-07-07 14:04:26 +08:00
    求助
    InDom
        2
    InDom  
       2021-07-07 14:10:53 +08:00
    使用自己注册的域名,然后解析道对应的 IP 。

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

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

    如果连域也不能改,那就考虑下自建 DNS ?
    429463267
        3
    429463267  
    OP
       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
        4
    429463267  
    OP
       2021-07-07 14:30:02 +08:00
    @InDom 公司之所以需要使用 docker hbase,目的就是省钱,所以不可能在开发环境去注册一个域名来完成单元测试的。
    429463267
        5
    429463267  
    OP
       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)
    }
    }


    ```

    实测可行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1012 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:55 · PVG 03:55 · LAX 11:55 · JFK 14:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.