我有两个 Spring 启动应用程序运行在docker。
这两个应用程序都连接到另一台计算机上运行的postgres数据库。
在将应用程序放入容器之前,我曾经从localhost创建一个ssh隧道,以连接另一台包含运行以下命令的数据库的计算机:
> ssh -vnN *user*@*host* -p *port* -L 5433:user-host.local:5432
这样,我就可以localhost:5433 in 我的application.properties文件来连接在端口5432中运行的远程数据库。
这是springboot应用程序的application.properties文件:
>spring.datasource.url = jdbc:postgresql://localhost:5433/*database*...\
>spring.datasource.username = *user*\
>spring.datasource.password = *password*
但是现在,在容器中运行同一个应用程序,我知道localhost指的是容器ip。我无法连接到远程数据库。
我不知道如何使用ssh隧道访问同一个远程数据库。
我该怎么做?
1条答案
按热度按时间ny6fqffe1#
问题解决了!
对于其他有同样问题的人:
在应用程序的aplication.properties文件中,我需要更改spring.datasource.url以指向主机的ip
新建application.properties
spring.datasource.url=jdbc:postgresql://主机ip_here:5433/database...
spring.datasource.username=用户
spring.datasource.password=密码
然后,在主机中我可以执行ssh命令链接到远程数据库,但是现在,在Map端口之前添加主机的ip。
这样,我告诉docker,在端口5433中访问主机ip的每个请求都将转发到端口5432(默认postgres端口)中的数据库主机
ssh-虚拟网络user@host -p端口-l主机\u ip_here:5433:用户主机。local:5432
我知道这个问题还有其他的解决方法,所以如果你有更好的方法,请发短信到这里!