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

2023-11-27

我有在远程 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 访问运行容器的目标计算机,则可以通过两个步骤实现此目的:

  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远程系统的(第二个 ip:端口对)(用以下命令演示)<VPS_IP>). See 这个答案了解更多信息。

请注意,此 ssh 连接将持续存在,直到您的网络保持连接。如果您想关闭此连接,请执行ps aux | grep ssh找到 ssh 转发进程的 PID,然后使用sudo kill -9 $PID杀死它。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • 使用 grep 进行多种搜索模式

    考虑我有以下数据流 BODY1 attrib1 someval11 attrib2 someval12 attrib3 someval13 BODY2 attrib1 someval21 attrib2 someval22 attrib3
  • 使用 docker-compose 从私有 GitHub 存储库构建 Docker 镜像

    我知道可以提供 GitHub HTTP URL 作为服务的构建上下文 version 3 9 services my app build https github com rambo my app git 上述方法对于公共回购来说效果很好
  • 在 docker 容器内创建 android 模拟器时出现“sh: 1: file: not found”

    我正在尝试在 docker 容器内创建一个 android 模拟器 但遇到了一些问题 SDK 更新和 AVD 创建成功 我尝试创建模拟器 出现以下错误 emulator avd test 22 no skin no audio no win
  • 关闭 python 后让进程保持运行

    我希望在终止原始进程后继续运行进程 以下代码在终止原始进程后不会使其进程保持运行 args yes Popen args shell True stdout None stdin None stderror None 我已经尝试了我能想到的
  • 无法连接到 Azure Ubuntu VM - 公钥被拒绝

    我们在 Azure 上使用 Ubuntu VM 一段时间了 很少遇到任何问题 然而 其中一台虚拟机最近出现了问题 出乎意料的是 Ubuntu VM 开始拒绝公钥 ssh i azure key email protected cdn cgi
  • Android SSH 示例代码

    我想创建一个 android 活动 用于与远程设备 通过 Wifi 建立 SSH 会话并在远程设备上执行一些 Linux 命令 任何人都可以获得一个快速 简短的示例 用于使用以下命令进行连接 身份验证和发送远程命令Trilead https
  • kubectl:在 WSL 终端中找不到

    我按照以下说明在 Windows10 上安装了 WSL2 https learn microsoft com en us windows wsl install win10 https learn microsoft com en us w
  • Spring Cloud Gateway 无法在 Docker 上运行

    我已经配置了一个 Spring Cloud 网关来重定向到使用以下路由创建的服务器 Bean public RouteLocator myRoutes RouteLocatorBuilder builder return builder r
  • 重启docker Windows 10命令行

    我试图弄清楚如何在命令行中重新启动 docker 以便我可以制作一个 bat 脚本来重新启动它并启动一些容器 我使用管理员访问权限创建了一个 dos 提示符并运行以下命令 PS C Windows system32 gt net stop
  • Android,在连接wifi的情况下与移动数据通信,无需上网

    我有一个汽车配套应用程序 需要与 WiFi 和移动数据网络进行通信 我的车辆控制单元提供了一个无需互联网访问的 WiFi 网络 它公开了我们可以从应用程序调用的 API 服务 除此之外 我们还需要使用手机移动数据 3G 4G 与另一个可通过
  • 重新链接匿名(未链接但打开)文件

    在 Unix 中 可以创建匿名文件的句柄 例如 使用 creat 创建并打开它 然后使用 unlink 删除目录链接 留下一个带有 inode 和存储的文件 但没有可能的方法重新打开它 此类文件通常用作临时文件 通常这就是 tmpfile
  • 进程如何知道它已收到信号

    如果我错了 请纠正我 以下是我对信号的理解 据我所知 信号生成 和信号传递有2个不同 事物 为了产生信号 操作系统只是在位数组中设置一个位 在过程控制中维护 工艺块 PCB 每一位 对应于特定信号 当设置一个位时 这意味着 该位对应的信号为
  • grep 查找 Unix 中的特殊字符

    我有一个日志文件 application log 其中可能包含以下多行普通和特殊字符字符串 Q 我想搜索包含这个特殊字符串的行号 grep Q application log 上述命令不返回任何结果 获取行号的正确语法是什么 Tell gr
  • Unix shell脚本找出脚本文件所在的目录?

    基本上我需要使用与 shell 脚本文件位置相关的路径运行脚本 如何将当前目录更改为与脚本文件所在的目录相同 在 Bash 中 你应该得到你需要的东西 如下所示 usr bin env bash BASEDIR dirname 0 echo
  • 如何确定非阻塞套接字是否真正连接?

    这个问题不仅限于Python 这是一个一般的套接字问题 我有一个非阻塞套接字 想要连接到一台可访问的机器 在另一端 该端口不存在 为什么 select 仍然成功 我预计会超时 sock send 因管道损坏而失败 select 之后如何确定
  • 如何从 Dockerfile 安装 Python 3.7 和 Pip

    我正在尝试构建基于 Ubuntu 18 04 的自定义 Docker 映像 Ubuntu 预装了 Python 3 6 但我想 1 安装 Python 3 7 2 将其设置为默认 Python 版本 这样就可以使用python代替pytho
  • 使用 pscp 命令时出现“未找到命令”

    我正在使用 PuTTY pscp 将项目文件夹传输到 AWS 实例 我可以使用 ppk 公钥文件进行连接并且ssh命令成功打开并登录 这里我使用命令来传输文件夹 pscp r i C path to my keys converted pe
  • GridGain - 通过 Grid.startNodes API 使用 SSH 以编程方式打开节点

    我正在使用 Grid startNodes java util Collection java util Map boolean int int 如此处定义 http gridgain com api javadoc org gridgai
  • 如何避免应用程序停止后 docker 容器停止

    有一个带有 Postgres 服务器的 docker 容器 postgres 停止或崩溃 无关紧要 我需要检查一些环境变量和一些文件的状态 默认情况下 容器在应用程序完成后停止 我知道有一个选项可以更改 dockerfile 中的默认行为

随机推荐