我有在远程 VPS 上的 docker-compose 网络中运行的容器。我希望能够从我的本地主机访问在这些容器之一中运行的数据库。
例如,如果容器app
and db
位于 VPS 上的容器网络中,我想访问db:5432
from 我的机器的 localhost:5432
。 Kubernetes 的 CLI 允许这样做kubectl port-forward <service-name> 5432:5432
.
是否有现有的解决方案可以在现有的unix命令和Docker的API中实现这种效果?我在互联网上搜索并没有产生任何 CLI 来执行此操作。
Cheers.
Edit:我已经接受了 Ali Tou 的回答,但是,很高兴看到一个不需要重新启动容器来重新配置其端口以将它们暴露到主机上的解决方案。
Edit 2:我在一篇与切线相关的帖子中发现了一种使用 socat 在 Docker 网络中转发流量的巧妙方法https://stackoverflow.com/a/42071577/12406113。然而,这是公开暴露端口而不是创建隧道,例如在 SSH 解决方案中。
假设您可以通过 SSH 访问运行容器的目标计算机,则可以通过两个步骤实现此目的:
- 将容器端口公开到您的 VPS 端口,并绑定到其环回 IP 以确保安全:
ports:
- 127.0.0.1:5432:5432
- 使用 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:端口对)(用以下命令演示)<VPS_IP>
). See 这个答案了解更多信息。
请注意,此 ssh 连接将持续存在,直到您的网络保持连接。如果您想关闭此连接,请执行ps aux | grep ssh
找到 ssh 转发进程的 PID,然后使用sudo kill -9 $PID
杀死它。
附:但是,这与直接连接的情况没有什么不同VPS_IP:5432
如果您没有安全问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)