【问题标题】:Forward a remote Docker container's port onto localhost将远程 Docker 容器的端口转发到 localhost
【发布时间】:2020-11-01 06:20:10
【问题描述】:

我有容器在远程 VPS 上的 docker-compose 网络中运行。我希望能够从我的本地主机访问在这些容器之一中运行的数据库。

例如,如果容器appdb 在VPS 上的容器网络中,我想从我的机器的 localhost:5432 访问db:5432。 Kubernetes 的 CLI 允许使用 kubectl port-forward <service-name> 5432:5432

是否有任何现有的解决方案可以在现有的 unix 命令和 Docker 的 API 中实现这种效果?我在 Internet 上的搜索没有找到任何 CLI 来执行此操作。

干杯。


编辑:我已经接受了 Ali Tou 的回答,但是,很高兴看到不需要重新启动容器来重新配置其端口以将它们公开到主机的解决方案。

编辑 2: 我在与切线相关的帖子 https://stackoverflow.com/a/42071577/12406113 中发现了一种使用 socat 在 Docker 网络中转发流量的巧妙方法。然而,这是公开暴露端口而不是创建隧道,例如在 SSH 解决方案中。

【问题讨论】:

  • 转发到你的本地主机有什么意义?
  • @AliTou - 在我的情况下,它会在开发过程中作为合作伙伴在同一个数据库上工作。它对于使用首选客户端调试数据库和一般故障排除也很有用。
  • 你有 ssh 访问目标机器的权限吗?
  • 您需要将本地端口映射到您的 VPS 端口,我认为下面的教程很有用,您也可以随时使用 SSH 进行端口映射,正如@AliTou 指出的devops.ionos.com/tutorials/…
  • 这不是编程问题,可能更适合 superuser.com。

标签: docker unix networking ssh containers


【解决方案1】:

假设您对运行容器的目标机器具有 SSH 访问权限,您可以分两步实现:

  1. 将容器端口公开到您的 VPS 端口,绑定到其环回 IP 以确保安全:
ports:
  - 127.0.0.1:5432:5432
  1. 使用 SSH 端口转发访问该容器的 5432 端口:
ssh -f -N -L 127.0.0.1:5432:127.0.0.1:5432 <VPS_IP>

上面的命令可能看起来令人困惑,但它要求 SSH 在您的客户端系统上侦听 127.0.0.1:5432(第一个 ip:port 对)并通过 ssh 隧道将其连接转发到 127.0.0.1:5432(第二个 ip:port 对) ) 的远程系统(用&lt;VPS_IP&gt; 演示)。请参阅this answer 了解更多信息。

请注意,在您的网络保持连接之前,此 ssh 连接是持久的。如果要关闭此连接,请执行ps aux | grep ssh 查找ssh 转发进程的PID,然后使用sudo kill -9 $PID 将其杀死。

附:但是,如果您没有安全问题,这与您直接连接到 VPS_IP:5432 的情况没有什么不同。

【讨论】:

  • 这正是我正在寻找的解决方案,谢谢!我不知道您可以在内部绑定端口的 IP。出于安全原因,我认为它会变得更加复杂。绝对的美。
  • 相当整洁!服务呢?我无法将服务绑定到 127.0.0.1 我收到此错误invalid argument "127.0.0.1:15672:15672" for "--publish-add" flag: hostip is not supported
  • @EbrahimKarimi 您应该将其作为另一个问题发布或在他们的 GitHub 问题中查找。我在这里发现了一个描述您的问题的旧问题,但没有得到答复:github.com/docker-archive/classicswarm/issues/2478
【解决方案2】:

您可以只使用端口部分,您可以在其中指定主机端口和容器端口来转发请求https://docs.docker.com/compose/networking/

【讨论】:

  • 也许我不清楚,但这不是我要问的。如果你阅读了这个例子,就会发现我正在寻找从完全不同的机器访问容器的端口到容器网络的主机。
  • 您可以使用远程系统的主机名和发布的端口号来访问服务。
猜你喜欢
  • 2016-07-22
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 2011-03-25
  • 1970-01-01
  • 2014-10-08
相关资源
最近更新 更多