【问题标题】:SSH port forwarding in DockerDocker 中的 SSH 端口转发
【发布时间】:2017-01-30 16:16:39
【问题描述】:

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

无论如何,据我了解,您可以像这样将端口 localhost:27017 映射到 mongo:27017

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

但是,如果我这样做,我必须提供 root 密码,然后它将我登录到 mongo 容器,并且不会发生端口转发

背景:我想这样做是因为我正在运行一个 Java 程序,该程序连接到本地主机上的 Mongo 数据库,我无法更改它。

【问题讨论】:

  • 您使用的是原生 linux 主机还是类似 docker 机器的东西?运行ssh -L 命令时是否有任何错误消息?
  • 我正在使用docker-compose。我可以将sshbackend 变为mongo。它在 Mac 上,所以我猜它仍然是 docker-machine 某处
  • 我已经添加了几个我尝试过的示例以及结果如何。此外,我认为这个问题与 docker 无关,而是我不了解 SSH 端口转发
  • @Jeanluca:我们不在这里使用 [已解决的] 标题黑客。请接受下面最符合您的解决方案(包括您自己的解决方案)的答案。

标签: ssh docker portforwarding ssh-tunnel


【解决方案1】:

我找到了正确的 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 :)

【讨论】:

  • 我不明白。这不是将端口转发到容器中吗?从容器中导出什么?