Windows Docker部署Infinispan12.1报ISPN004016错误连接失败如何解决?
问题根因分析
- Host网络模式不兼容:Windows Docker Desktop基于Linux虚拟机运行容器,
--network host参数仅对原生Linux环境的Docker生效,Windows下使用该参数不会将容器端口暴露到宿主机网络,导致端口无法访问。 - 服务端地址广播错误:默认配置下,Infinispan会将容器内部IP地址作为节点地址返回给客户端,宿主机无法直接访问容器内部IP,即使配置了端口映射,客户端拿到错误的节点地址也会连接失败。
- SASL认证机制不匹配:Infinispan 12.1默认禁用了弱安全等级的DIGEST-MD5认证机制,客户端使用该机制无法通过服务端认证。
解决方案
1. 修正Docker启动命令
使用端口映射模式启动,新增两个环境变量指定服务端绑定地址和对外暴露的地址,命令如下:
docker run -p 11222:11222 -e USER="Titus Bramble" -e PASS="Shambles" -e INFINISPAN_BIND_ADDRESS=0.0.0.0 -e INFINISPAN_EXTERNAL_ADDRESS=127.0.0.1 --name infinispan infinispan/server:12.1
INFINISPAN_BIND_ADDRESS 让服务端在容器内绑定所有网卡,INFINISPAN_EXTERNAL_ADDRESS 指定服务端返回给客户端的节点地址为宿主机127.0.0.1,避免返回容器内部IP。
2. 调整客户端连接配置
保留客户端基础智能配置,同时将SASL认证机制替换为12.1版本默认支持的SCRAM-SHA-256,修改后代码如下:
ConfigurationBuilder builder = new ConfigurationBuilder(); builder.addServer() .host("127.0.0.1") .port(ConfigurationProperties.DEFAULT_HOTROD_PORT) .clientIntelligence(ClientIntelligence.BASIC) .security().authentication() .username("Titus Bramble") .password("Shambles") .realm("default") .saslMechanism("SCRAM-SHA-256"); // Connect to the server RemoteCacheManager client = new RemoteCacheManager(builder.build());
3. 前置验证
容器启动完成后,先在Windows宿主机执行telnet 127.0.0.1 11222确认端口连通正常,再运行客户端代码即可。
内容的提问来源于stack exchange,提问作者Florian Schaetz
相关产品推荐
相关产品推荐

