我在Dockers容器中运行了一个Spring Boot应用程序。该应用程序提供REST端点,可以使用http://localhost:8080/endpoint从主机成功调用。以前,当此应用程序在主机上而不是在Dockers中运行时,我可以使用应用程序内的jdbc:mariadb:// localhost:3308 / fi?user = userName& password = thePassword来调用本地MariaDB。现在应用程序在Dockers中运行,连接返回错误:"无法连接到address =(host = localhost)(port = 3308)(type = master):连接被拒绝(连接被拒绝)&# 34;
进行连接的代码段如下:
Connection connection = DriverManager.getConnection("jdbc:mariadb://localhost:3308/fi?user=username&password=thePassword");
Statement stmt = connection.createStatement();
String query = "";
ResultSet rs = stmt.executeQuery("SELECT * ....;");
我已经发布了8080端口以接受来自主机的REST调用,并试图发布或公开3308端口以允许进行数据库调用,但没有帮助。
提前谢谢!
答案 0 :(得分:1)
将数据库与docker一起使用的建议方法是在分离的容器中运行它。 Docker容器位于同一个(docker)网络中,因此您只需要link它们。 Here您拥有MariaDB图像和指南如何使用它。您可以将现有数据库转储到图像中(因此您无需再次执行此操作)。
要做到这一点,你必须:
答案 1 :(得分:1)
如果您打算只进行开发,可以链接容器或更好,您可以使用docker-compose。但要小心:容器中的数据库不用于生产!
从容器中,您可以使用ip route show
# ip route show
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.2
然后默认路由是您的主机IP(此处为172.17.0.1)
此时,请注意可以阻止连接的主机防火墙
在您的入口点脚本中,您可以使用ip route show | awk '/default/ {print $3}'
检索主机IP。然后,您可以通过环境变量传递此IP并在应用程序中检索它。