我在Mac机器上设置ssh隧道时遇到问题。我在Ubuntu盒子上设置隧道没有问题。这是我运行的命令
ssh -nNT -L 172.18.0.1:4000:production-database-url:3306 jump-point
在Mac上运行此命令时,出现以下错误:
bind [172.18.0.1]:4000: Can't assign requested address
channel_setup_fwd_listener_tcpip: cannot listen to port: 4000 Could
not request local forwarding.
如果我在没有bind_address(172.18.0.1)的情况下运行,则可以通过隧道连接到数据库。
如果我绑定到所有接口(0.0.0.0),则打开了隧道,但是,从Docker容器内部到数据库的连接不起作用。
答案 0 :(得分:1)
172.18.0.1
是docker的default bridge network gateway的IP,而不是主机的IP。
您可以运行此命令进行检查。
$ docker network inspect bridge
适用于Mac的Docker具有limitations
还请注意,这意味着docker run选项--net-host
在Mac上不受支持,但这也许是一件好事
有一种解决方法
在容器内使用名称host.docker.internal
,就像直接在Mac上使用localhost一样。
不用担心隧道的绑定地址:
ssh -nNT -L 4000:production-database-url:3306 jump-point
您没有提到哪个数据库,但是我从3306端口获取它是MySQL。
要使用mysql cli从容器内通过主机上的ssh隧道连接到远程mysql数据库服务器,可以运行:
mysql --host host.docker.internal [... other options go here]