我们有一个带有多个容器的 docker 设置(Windows 10、本机 docker、compose V3),其中一个运行带有 JMS 子系统(ActiveMQ)的 Wildfly 10。在 docker NAT 内部一切正常(各种服务通过 in-vm 或 http 连接器使用 JMS),但我们还需要从外部 docker 连接到 JMS。我们通过wildfly 公开的JMSConnectionFactory 上的远程JNDI 查找实现JMS 连接。问题是连接工厂公布了无法从外部访问的 docker 容器的内部 IP 地址。
我们有正确的端口(实际上只需要一个 http 端口)可以通过 localhost 公开和访问。
以下是我尝试过的一些解决方案:
理想情况下,我想要一个适用于 Windows 和 Linux 的优雅的“金子弹”解决方案,但我知道这可能无法实现。
更新:我找到了一个解决方案(有点hacky)但我认为除非有人提出更好的建议,否则应该这样做。
我在wildfly中创建了额外的JMSConnectionFactory(在standalone.xml中配置):
<connection-factory name="ExternalConnectionFactory" entries="java:jboss/exported/jms/ExternalConnectionFactory" connectors="external-http-connector"/>
Run Code Online (Sandbox Code Playgroud)
它使用自己的连接器
<http-connector name="external-http-connector" socket-binding="external-http" endpoint="http-acceptor"/>
Run Code Online (Sandbox Code Playgroud)
我使用出站套接字绑定,这部分有点麻烦,因为它允许我指定任何网络地址。
<outbound-socket-binding name="external-http">
<remote-destination …Run Code Online (Sandbox Code Playgroud)