SSH 隧道设置以访问容器中的数据库

问题描述 投票:0回答:1

我有一个在容器中运行的 Mariadb 数据库,在服务器计算机中运行(我们称其 IP 地址为“DB”)

在另一台服务器(我们将其IP地址称为“APP”)中,应用程序正在另一个容器中运行。该应用程序需要访问数据库,但我想通过 SSH 隧道而不是 3306 端口来执行此操作。

我对隧道不熟悉,所以,从APP机器上运行的容器中的shell中,我尝试了:

ssh -f user@DB -L 1234:127.0.0.1:3306 -N -p 5678 -4

(5678是数据库机器的SSH端口,我可以在这个端口上成功ssh到这台机器。并且隧道显然已成功建立)

然后我尝试:

mariadb -h localhost -P 1234 -u dbuser -p

但我收到此错误:

ERROR 2013 (HY000): Lost connection to server at 'handshake: reading initial communication packet', system error: 11

但是,直接连接到数据库可以正常工作:

mariadb -h DB -u dbuser -p

你能帮我解决这个问题吗?

我尝试做的隧道是保护数据库访问安全的正确方法吗?

附加信息:在数据库机器上,数据库容器的3306端口映射为:

docker run -v [DB]:3306:3306 ...

非常感谢!

docker ssh mariadb ssh-tunnel
1个回答
0
投票

我发现了问题:docker run 的 -v 选项不正确:它必须是 127.0.0.1 而不是 [DB],以便让主机访问其托管容器的 3306 端口。

© www.soinside.com 2019 - 2024. All rights reserved.