Docker中的SSH端口转发

我有这两个容器,比如backend (CentOs)和mongo 。 我想要的是,从backend容器内,我可以连接到mongo数据库,就好像它在本地运行$> mongo localhost:27017

无论如何,据我了解这一切,你可以映射到本地端口:27017到mongo:27017像这样

 $backend> ssh -L 27017:mongo:27017 root@mongo 

但是,如果我这样做,我必须提供root密码,之后它将我login到mongo容器中,并且没有端口转发

背景:我想这样做,因为我正在运行一个Java程序连接到本地主机上的Mongo数据库,我不能改变这一点。

默认情况下(网桥模式)每个容器都有自己的networking接口,您将无法通过本地主机进行通信。

您可以使用–link选项轻松链接容器,并使用-p选项打开您想要的端口:

 docker run --name mongo -p 27017:27017-it <mogo image> /bin/bash docker run --name backend --link mongo -it <backend image> /bin/bash 

现在在后端容器ping里,mongo容器应该可以工作,你的ssh命令也可以。

 $ping mongo PING mongo (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: icmp_seq=0 ttl=64 time=0.224 ms 

希望这会有帮助。

我find了正确的SSH端口转发命令

 $> ssh root@mongo -L 27017:localhost:27017 -Nf 

通常使用这个命令的想法是,你映射一个非公共的端口 – 通过公共服务器到你自己的服务器/计算机。

 * `root@mongo` - the public server * -L <port on your server>:<third server address>:<port> * `-Nf` - Do not login 

因为public serverthird server是相同的计算机/容器,你必须使用localhost 🙂