我在 docker 容器中有一个应用程序mqtt-client
。
我已经在主机(Windows)上安装了具有 mqtt 接口的 ActiveMQ-Broker:0.0.0.1:1549
(实际上,我可以将 winwows-PC 称为超级主机。Docker 容器在 Windows-Host 上的 WSL2-host(Debian)中运行。
Docker 容器配置了默认网络设置,例如bridged network
,不公开任何端口。
我的mqtt client
docker-container 可以成功连接到在 host-windows 上运行的 ActiveMQ 代理,通过Host-IP:1549
我mqtt client
在docker-container上订阅了一个主题。
然后,我使用 ActiveMq 管理控制台向该主题发送一条消息:
不幸的是,我的mqtt client
docker-container 没有收到该消息。
我在 Windows 上运行了另一个 mqtt 客户端并订阅了同一主题,以确认ActiveMq Broker
已成功将消息发送给订阅者,并且看到,是的,Windows 上的 mqtt 客户端可以毫无问题地接收消息。
docker-container
会不会是因为可以到达windows-host
,但windows-host
无法写入所有端口而发生问题docker-container
?
我看到 ActiveMQ 中建立的连接如下:
3718
这是否意味着我应该在执行时公开端口docker run
,以便 Windows 主机中的 AciveMq 向 docker-container 发送消息?但假设这个端口每次都改变,我该怎么办?
如何实现Windows-Host上的ActiveMQ broker向运行的订阅者发送消息docker-container
?
答案1
问题不在于网络。因此,问题的答案是:
如果docker-container-client连接到broker,那么broker就可以毫无问题地将消息发送给docker-container-client。
这个问题很愚蠢:实际上,在低级中,消息已经被接收,但是在高级代码中却无法看到它。