fxw*_*ger 3 mqtt docker dockerfile docker-compose
我有一个在 Docker 容器中运行的客户端,该容器订阅 MQTT 代理,然后将数据写入数据库。要连接到 MQTT 代理,我必须设置端口转发。
在我的本地计算机上开发客户端时,以下工作正常:
SSH -L <mqtt-port:1883>:localhost:<9000> <user>@<ip-of-server-running-broker>
Run Code Online (Sandbox Code Playgroud)
然后,客户端配置为通过 localhost:9000 订阅 MQTT 代理。这一切在我的本地机器上运行良好。
在容器内它不会,除非我运行容器,--net=host但出于安全考虑我宁愿不这样做。
我尝试了以下方法:
(我想要 2 个单独的容器,因为 IP 地址必须经常更改,而且我不想一直重新构建客户端容器)
但到目前为止我所有的尝试都失败了。转发似乎有效(我可以访问 ssh 容器中服务器上的 shell),但我还没有找到从客户端容器内实际订阅 mqtt 代理的方法。
也许这实际上很简单,我只是不明白它是如何工作的,但我已经在这个问题上停留了几个小时了......任何帮助或提示都值得赞赏!
该解决方案实际上非常简单,并且无需使用-net=host. 我需要绑定0.0.0.0并使用网关转发选项以允许远程主机(数据库客户端)连接到转发的端口。
ssh -L -g *:<hostport>:localhost:<mqtt-port/remote port> <user>@<remote-ip>
然后,同一 Docker 桥接网络中的其他容器可以简单地使用连接字符串<name-of-ssh-container>:<hostport>。
| 归档时间: |
|
| 查看次数: |
5429 次 |
| 最近记录: |