微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将远程Docker容器的端口转发到localhost

如何解决将远程Docker容器的端口转发到localhost

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

例如,如果容器appdb在VPS上的容器网络中,我想从我的计算机的 {{1 }}。 Kubernetes的CLI可以通过db:5432进行此操作。

在现有的unix命令和Docker的API中是否存在任何实现此效果解决方案?我在Internet上搜索并没有产生任何CLI来完成此操作。

干杯。


编辑:我已经接受了Ali Tou的回答,但是,很高兴看到一个不需要重启容器即可重新配置其端口以将其暴露给主机的解决方案。 / p>

编辑2:我在与切向相关的帖子https://stackoverflow.com/a/42071577/12406113中找到了一种使用socat在Docker网络中转发流量的聪明方法。但是,这是在SSH解决方案中公开公开端口而不是创建隧道。

解决方法

假设您具有运行容器的目标计算机的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(第二个) (用<VPS_IP>演示的远程系统的ip:port对)。有关更多信息,请参见this answer

请注意,此ssh连接将一直保持,直到您的网络保持连接状态。如果要关闭此连接,请执行ps aux | grep ssh查找ssh转发过程的PID,然后使用sudo kill -9 $PID将其终止。

P.S。但是,如果您没有安全方面的考虑,直接连接到VPS_IP:5432的情况也没什么不同。

,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。