本地项目中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的输出

报错信息
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
相关产品推荐
相关产品推荐

