目前,我在私有网络内有一个运行 Alpine Linux 的 docker 镜像。我拥有该 docker 镜像的 root 访问权限。
在同一个私有网络上,有一个数据库实例。只有同一网络上的系统才能访问数据库(例如:上述docker镜像)
现在,为了调试数据库内部的东西,我必须通过 SSH 连接到 Docker 镜像,然后从该 Docker 镜像内部运行命令行工具。这相当复杂
有没有办法让我使用本地电脑内的开发工具连接到该数据库?我不确定这是否是端口转发或代理
答案1
我假设你是这样连接的:
ssh user@docker
你需要-L
:
ssh -L port1:server:port2 user@docker
server:port2
从docker容器中看到的数据库的地址和端口在哪里(这个地址将被解析那里)。
您的本地ssh
将在 TCP 端口上进行本地监听port1
。您选择端口。
现在从本地计算机连接到localhost:port1
(或127.0.0.1:port1
),连接将从 到达server:port2
。docker
机器server
将看到它来自docker
。这称为“本地端口转发”。
这样,本地工具就可以访问远程数据库。该工具需要连接到localhost:port1
。
笔记:
- 这仅适用于 TCP,非 UDP。
- 本地网络中的其他机器将无法使用本地计算机作为中继来访问数据库。这可能正是您想要的。如果不是,请检查此问题:我可以使用 SSH 在本地网络上提供隧道资源吗?
- 用于
ssh -N …
建立隧道无需执行远程命令。 - 用来
autossh
自动化这一过程。 - 编号低于 1024 的端口是特权端口。作为普通用户,您无法绑定到此类端口。请
port1
酌情选择。 - SSH 服务器上的设置(
AllowTcpForwarding
就您而言)可用于禁止端口转发。默认设置是允许,因此它可能开箱即用。sshd_config
docker