我有一个Spring引导应用程序,使jdbc连接到不同VPC中的数据库。从我的本地我没有访问这个数据库,所以当我在本地部署我的应用程序时,我必须打开一个ssh隧道才能连接到数据库。这是怎样的隧道被设置:连接到一个端口从码头集装箱到主机打开的端口
ssh -L 61616:data_base_host:data_base_port [email protected]_server
然后我的应用程序连接使用:
jdbc:sqlserver://localhost:61616....
现在我需要把我的应用程序码头工人,容器内。这是我如何运行我的泊坞窗图像:
docker run -p 9018:9018 myapp
9018是http端口。当Spring Boot应用程序在Docker内部启动时,它无法连接到数据库。错误是:
Failed to initialize pool: The TCP/IP connection to the host localhost, port 61616 has failed.
所以我需要将容器内的端口61616绑定到主机中的端口61616。我能够修复使用此JDBC URL我的问题:
jdbc:sqlserver://docker.for.mac.localhost:61616
使用别名docker.for.mac.localhost使的伎俩,但它是面向Mac平台的解决方案。我也试过:
docker run -p 9018:9018 -p 61616:61616 myapp
并没有工作。
任何想法?
码头工人并没有提供一种简单的方式来获得主机的IP。根据docker方法,如果你在应用程序中运行容器,则不需要在主机上运行db,你还应该容纳它。如果数据库位于容器内部,则很容易连接到数据库。不过,你可以尝试一些解决方法,看看这个答案的第二部分https://stackoverflow.com/a/24326540/2065796 你也可以考虑一个选项,从docker容器内部建立ssh隧道。 –