gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:14:06 25 4
gpt4 key购买 nike

我有容器在远程 VPS 上的 docker-compose 网络中运行。我希望能够从我的本地主机访问在这些容器之一中运行的数据库。
例如,如果容器 appdb在 VPS 上的容器网络中,我想访问 db:5432来自我机器的localhost: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 解决方案中。

最佳答案

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

  • 将容器端口公开到您的 VPS 端口,绑定(bind)到其环回 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:port 对)远程系统(用 <VPS_IP> 演示)。见 this answer了解更多信息。
    请注意,在您的网络保持连接之前,此 ssh 连接是持久的。如果要关闭此连接,请执行 ps aux | grep ssh查找 ssh-forwarding 进程的 PID,然后使用 sudo kill -9 $PID杀死它。
    附言但是,这与您直接连接到 VPS_IP:5432 的情况没有什么不同。如果您没有安全问题。

    关于docker - 将远程 Docker 容器的端口转发到 localhost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64629210/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com