转发远程Docker容器';将端口连接到本地主机

转发远程Docker容器';将端口连接到本地主机,docker,unix,networking,ssh,containers,Docker,Unix,Networking,Ssh,Containers,我在远程VPS上的docker compose网络中运行容器。我希望能够从本地主机访问这些容器中运行的数据库 例如,如果容器app和db位于VPS上的容器网络中,我想从我机器的localhost:5432访问db:5432。Kubernetes的CLI允许使用kubectl端口转发5432:5432进行此操作 在现有的unix命令和Docker的API中,是否有任何现有的解决方案可以实现这种效果?我在互联网上的搜索并没有产生任何CLI来实现这一点 干杯 编辑:我已经接受了Ali Tou的回答,

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

例如,如果容器
app
db
位于VPS上的容器网络中,我想从我机器的
localhost:5432
访问
db:5432
。Kubernetes的CLI允许使用
kubectl端口转发5432:5432进行此操作

在现有的unix命令和Docker的API中,是否有任何现有的解决方案可以实现这种效果?我在互联网上的搜索并没有产生任何CLI来实现这一点

干杯


编辑:我已经接受了Ali Tou的回答,但是,如果能找到一种解决方案,它不需要重新启动容器来重新配置其端口以将其暴露到主机上,那将是一件非常棒的事情


编辑2:我在一篇相关文章中发现了一种在Docker网络中使用socat转发流量的聪明方法。但是,这是公开暴露端口,而不是创建隧道,例如在SSH解决方案中。

您可以使用“端口”部分,在该部分中可以指定主机端口和容器端口以转发请求。

假设您对容器运行的目标机器具有SSH访问权限,则可以通过两个步骤实现这一点:

  • 将容器端口暴露到您的VPS端口,绑定到其环回IP以确保安全:
  • 端口:
    - 127.0.0.1:5432:5432
    
  • 使用SSH端口转发访问该容器的端口5432:
  • ssh-f-N-L 127.0.0.1:5432:127.0.0.1:5432
    
    上面的命令可能看起来很混乱,但它请求SSH监听客户端系统上的
    127.0.0.1:5432
    (第一个ip:port对),并通过SSH隧道将其连接端口转发到远程系统的
    127.0.0.1:5432
    (第二个ip:port对)(用
    演示)。有关更多信息,请参阅

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


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

    转发到本地主机有什么意义?@AliTou-在我的情况下,在开发过程中作为合作伙伴在同一数据库上工作。它对于使用首选客户端调试DB和进行一般故障排除也很有用。您是否具有目标计算机的ssh访问权限?您需要将本地端口映射到VPS的端口,我认为下面的教程很有用,您也可以像@AliTou指出的那样始终使用ssh进行端口映射这不是编程问题,可能更适合superuser.com。也许我不清楚,但这不是我要问的。如果您阅读了该示例,可以看到我希望从一台完全不同的计算机访问容器的端口到容器网络的主机。您可以使用远程系统的主机名和发布的端口号来访问该服务。这正是我想要的解决方案,谢谢!我不知道您可以在内部绑定端口的IP。出于安全考虑,我认为事情会复杂得多。绝对的美。