docker容器中的SSH隧道
我有一个运行在docker容器中的客户机,该容器订阅MQTT代理,然后将数据写入数据库。 要连接到MQTT代理,我必须设置端口转发 在我的本地计算机上开发客户端时,以下各项工作正常:docker容器中的SSH隧道,docker,docker-compose,dockerfile,mqtt,Docker,Docker Compose,Dockerfile,Mqtt,我有一个运行在docker容器中的客户机,该容器订阅MQTT代理,然后将数据写入数据库。 要连接到MQTT代理,我必须设置端口转发 在我的本地计算机上开发客户端时,以下各项工作正常: SSH -L <mqtt-port:1883>:localhost:<9000> <user>@<ip-of-server-running-broker> SSH-L:localhost:@ 然后将客户机配置为通过localhost:9000订阅MQTT代理。 这
SSH -L <mqtt-port:1883>:localhost:<9000> <user>@<ip-of-server-running-broker>
SSH-L:localhost:@
然后将客户机配置为通过localhost:9000订阅MQTT代理。
这一切都在我的本地机器上运行良好
在容器中它不会运行,除非我使用--net=host
运行容器,但出于安全考虑,我不希望这样做
我尝试了以下方法:
任何帮助或提示都将不胜感激 该解决方案实际上非常简单,不需要使用
-net=host
。
我需要绑定到0.0.0.0
,并使用网关转发选项允许远程主机(数据库客户端)连接到转发的端口
ssh-L-g*::localhost:@
同一Docker网桥网络中的其他容器可以简单地使用连接字符串
:
我会将运行Docker容器的客户端配置为使用hosthost.Docker.internal
。不确定是否等于使用--net=host
…您是如何验证步骤2是否正确执行的?非常感谢您发布它,终于可以让它工作了!尽管修正很小,-g
不应该在-L
和转发之间options@dain很高兴我的解决方案对你有用!不过,我并不认为有必要进行更正,该命令完全按照我的预期工作。你能详细说明一下吗?如果我这样离开订单,我得到了错误的本地转发规范'-g'
,这很有意义,因为-g
插入了-L
及其参数之间。这订单对我有效。。您使用的是什么操作系统?OpenSSH_7.9p1 Debian-10+deb10u2、OpenSSL 1.1.1d 2019年9月10日
和Debian GNU/Linux 10(buster)