当前位置: 首页 > 知识库问答 >
问题:

将远程Docker容器的端口转发到本地主机

步衡
2023-03-14

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

例如,如果容器appDB位于VPS上的容器网络中,我希望从计算机的localhost:5432访问DB:5432。Kubernetes的CLI允许使用Kubectl端口转发 5432:5432

编辑:我已经接受了Ali Tou的回答,但是,如果能看到一个不需要重新启动容器来重新配置其端口以将它们暴露到主机上的解决方案,那就太好了。

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

共有1个答案

周马鲁
2023-03-14

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

  1. 将集装箱端口公开到您的VPS端口,绑定到其环回IP,以确保安全:
ports:
  - 127.0.0.1:5432: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对)(用 演示)。有关更多信息,请参见此答案。

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

 类似资料:
  • 问题内容: 主机可以打开Docker容器访问端口吗?具体来说,我在主机上运行了MongoDB和RabbitMQ,我想在Docker容器中运行一个进程以侦听队列并(可选)写入数据库。 我知道我可以将端口从容器转发到主机(通过- p选项),并可以从Docker容器中连接到外部环境(即Internet),但我不想公开RabbitMQ和MongoDB端口从主持人到外界 编辑:一些澄清: 我必须执行此技巧才

  • 问题内容: 我在Mac OSX上使用Docker。 我有一个带有打开的守护程序的容器,正在侦听port 。 虚拟机设置为将所有计算机端口流量转发到此容器端口。 我想将我的本地主机设置为将所有流量转发到计算机端口。 我的机器在 我已经使用Apache虚拟主机配置和Proxy将本地端口8080上的所有HTTP通信转发到了计算机。 对ssh做相同的正确方法是什么? 我认为它涉及到此处提到的SSH隧道传输

  • 问题内容: 我在公司中提供一个私有Docker容器,并希望我的同事能够在我们的内部网络中访问,问题是我的来宾操作系统是OSX,因此我只能使用192.168.99.100:3000访问我的应用程序来自docker机器的默认IP。 如何将docker-machine 3000端口转发到主机80端口? 问题答案: 目前,Docker Machine是在您计算机中VirtualBox下运行的虚拟机,因此要

  • 我封装了一个应用程序,它是自动化Selenium测试的测试驱动程序。Selenium服务器(也称为Selenium Hub)运行在另一个容器中,以及本地主机4444下的Firefox节点。但我的应用程序无法访问它: 我通过docker-comush启动了这些容器: 我猜我的docker作文有错,但我想不出来。请帮忙!顺便说一句:我在Windows 7上运行,使用Docker和一个流浪的虚拟机。在我

  • 我想从一个服务器设置服务多个站点: 到目前为止,我只发现docker在使用静态IPS时进行端口重定向。 是否可以通过主机名使用docker进行端口重定向? 我使用一个免费的亚马逊EC2 Insance。 谢谢博

  • 我有一个swarm集群,我在其中创建了一个全局服务,在集群中的所有docker主机上运行。 目标是让此服务的每个容器实例连接到侦听docker主机上的端口。 有关详细信息,我将遵循此Docker守护进程指标指南,以在所有主机上公开新的docker指标API,然后将该主机端口代理到覆盖网络中,以便Prometheus可以从所有群主机中抓取指标。 我已经阅读了多个docker github问题#839