【发布时间】:2015-07-18 03:47:48
【问题描述】:
我目前正在努力解决以下问题:
我有一个可以在集群中运行的 Java EE 应用程序(它确实可以)。对于节点之间的数据交换,我使用 Hazelcast 3.3.3。 由于我们的客户害怕 UDP,我们使用 TCP。 所以我为每个节点配置了 3 个 hazelcast 参数: 要使用的网络接口、端口和集群成员。 在现实生活中(不是 docker 环境)一切正常。 现在我想将我的 Java EE 服务器放入 docker 容器中(每个节点一个),并通过 Hazelcast 链接它们。
我所做的是:
在运行 docker 容器的主机上,我创建了几个虚拟网络接口 (172.21.0.X)。 对于每个 docker 容器,我提供了网络映射,例如 -p 172.21.0.X:5190:5190(5190 是我用于 Hazelcast 的端口)
在容器内的 Java EE 应用程序中,我将 hazelcast 配置为侦听接口 172.21.0.X,端口 5190 成员 172.21.0.X:5190,...... 现在的问题是:docker 会为每个 cointainer 分配一个内部 IP 号。事先我无法确定 docker 将分配哪个 IP 号。 它绝对不是我想使用的 IP (172.21.0.X)。 Hazelcast 启动并告诉我:找不到匹配的接口。当然不是。 Hazelcast 将检查 docker 容器的 IP 接口,类似于 172.4.XX。这不适合我给 hazelcast 的配置(使用 172.21.X.X)。
到目前为止,似乎无法指定 docker 容器的内部 IP 号。我可以从正在运行的容器中查询它,但为时已晚,因为我需要在启动容器之前配置我的 Java EE 服务器。
对此有任何提示吗?是否可以让 Hazelcast 使用 TCPIP 运行?
【问题讨论】:
-
我认为您正在寻找此线程和 Nick Scavelli 的答案。 groups.google.com/forum/#!msg/vertx/MvKcz_aTaWM/QM6CfllX9HQJ
-
在网络的 hazelcast 配置中使用“公共地址”完成了这项工作。将其设置为 IP,可以从外部访问 docker 容器并且可以正常工作。谢谢。