You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地项目中GridDB Docker Java Client配置失效问题排查

问题:Docker GridDB Java客户端正常运行,但本地Java代码无法连接

我通过Docker CLI成功运行GridDB Java客户端,执行命令如下:

$ docker run -d --network="host" griddb/griddb
$ docker run --network="host" griddb/java-client

客户端可正常返回预期信息。我将Docker Java客户端暴露的配置迁移至本地Java代码中,且后台GridDB Docker容器已运行,但代码始终无法通过连接配置环节。

本地Java配置代码

public static void main(String[] args) throws GSException {
    Properties props = new Properties();
    props.setProperty("notificationAddress", "239.0.0.1");
    props.setProperty("notificationPort", "31999");
    props.setProperty("clusterName", "dockerGridDB");
    props.setProperty("user", "admin");
    props.setProperty("password", "admin");
    GridStore store = GridStoreFactory.getInstance().getGridStore(props);
    Collection<String, Person> col = store.putCollection("PEOPLE", Person.class);
    Person person=new Person();
    person.name="shisia";
    person.age=30;
    col.put(person);
    Query<Person> query = col.query("select * where name = 'shisia'");
    RowSet<Person> rs = query.fetch(true);
    while (rs.hasNext()) {
        // Update the searched Row
        Person person1 = rs.next();
        System.out.println("Name: "+ person1.name +" Age: "+ person1.age);
    }
    store.close();
}

Docker CLI中GridDB的输出

GridDB Docker输出

报错信息

Hag 28, 2023 2:42:39 WB com.toshiba.mwcloud.gs.GridStoreLogger$Connection info
INFO: Retry started (context=73ad2d6, statement=null, orgAddress=null, partition=0, statementId=0, trialCount=0)
com.toshiba.mwcloud.gs.common.GSConnectionException: [145028:JC_BAD_CONNECTION] Failed to update by notification (address=/239.0.0.1:31999, reason=Receive timed out)
    at com.toshiba.mwcloud.gs.subnet.NodeResolver.updateMasterInfo(NodeResolver.java:854)
    at com.toshiba.mwcloud.gs.subnet.NodeResolver.prepareConnectionAndClusterInfo(NodeResolver.java:558)
    at com.toshiba.mwcloud.gs.subnet.NodeResolver.getPartitionCount(NodeResolver.java:241)
    at com.toshiba.mwcloud.gs.subnet.GridStoreChannel$5.execute(GridStoreChannel.java:2277)
    at com.toshiba.mwcloud.gs.subnet.GridStoreChannel.executeStatement(GridStoreChannel.java:1847)
    at com.toshiba.mwcloud.gs.subnet.GridStoreChannel.executeResolver(GridStoreChannel.java:2084)
    at com.toshiba.mwcloud.gs.subnet.GridStoreChannel.resolvePartitionId(GridStoreChannel.java:2274)
    at com.toshiba.mwcloud.gs.subnet.SubnetGridStore.putContainer(SubnetGridStore.java:992)
    at com.toshiba.mwcloud.gs.subnet.SubnetGridStore.putCollection(SubnetGridStore.java:1049)
    at com.toshiba.mwcloud.gs.subnet.SubnetGridStore.putCollection(SubnetGridStore.java:797)
    at com.toshiba.mwcloud.gs.subnet.SubnetGridStore.putCollection(SubnetGridStore.java:100)
    at com.toshiba.mwcloud.gs.partitioned.PartStore.putCollection(PartStore.java:177)
    at org.example.Griddb_Tesr.main(Griddb_Tesr.java:37)
Caused by: java.net.SocketTimeoutException: Receive timed out
    at java.base/sun.nio.ch.DatagramChannelImpl.trustedBlockingReceive(DatagramChannelImpl.java:744)
    at java.base/sun.nio.ch.DatagramChannelImpl.blockingReceive(DatagramChannelImpl.java:673)
    at java.base/sun.nio.ch.DatagramSocketAdaptor.receive(DatagramSocketAdaptor.java:241)
    at java.base/java.net.DatagramSocket.receive(DatagramSocket.java:714)
    at com.toshiba.mwcloud.gs.subnet.NodeResolver.updateMasterInfo(NodeResolver.java:795)
... 12 more

原因分析与解决方案

1. 多播网络访问限制

Docker使用--network="host"时,容器直接共享主机网络栈,能正常接收239.0.0.1的多播消息。但本地Java程序可能受主机防火墙、网络配置限制,无法接收多播数据包。

  • 解决方案:
    • 临时关闭主机防火墙测试,或添加规则允许31999端口的UDP多播流量。
    • 改用单播模式连接,直接指定GridDB节点的IP地址(主机IP),修改配置:
      props.setProperty("notificationMember", "127.0.0.1:10001"); // 替换为主机实际IP,10001是GridDB默认单播端口
      // 移除notificationAddress和notificationPort配置
      

2. 集群名称不匹配

检查GridDB容器的实际集群名称是否为dockerGridDB,可通过容器日志确认:

docker logs <griddb-container-id>

若集群名称不符,修改代码中的clusterName属性为实际值。

3. Java客户端版本不兼容

确保本地使用的GridDB Java客户端版本与Docker容器中的GridDB版本完全一致,版本不匹配会导致连接协议不兼容。

  • 查看GridDB容器版本:
    docker inspect griddb/griddb | grep "VERSION"
    
  • 在本地项目依赖管理(如Maven/Gradle)中使用对应版本的客户端依赖。

4. 端口映射问题(若修改过网络模式)

如果后续调整过Docker网络模式,需确保31999(多播)、10001(单播)等端口已正确映射到主机。

内容的提问来源于stack exchange,提问作者NebuCodeNezzar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:02:10