我有两个Docker容器。一个是基于标准的MariaDB图像。容器名为" mariadb",其中一个数据库名为" fi"。 fi db里面有几个表,每个表有几行数据。使用DataGrip或任何其他数据库查看软件,我可以使用端口3306成功访问和查询此数据库在localhost上调用它。
我的第二个Docker容器运行一个Spring Boot应用程序,该应用程序需要访问MariaDB中的数据。如果我在docker中运行MariaDB,并在主机上运行Spring Boot应用程序,我可以使用连接字符串成功访问docker中的MariaDB:" jdbc:mariadb:// localhost:3306 /?user =名为myUsername&安培;密码= MYPASSWORD&#34 ;.我的问题是,当我尝试在单独的Docker中运行它们时,Spring Boot应用程序无法访问数据库。我找到了很多人对" Link"两个码头工人,但这似乎没有解决问题。当我运行Spring Boot docker时,我执行命令" docker run -i -p 8080:8080 --link mariadb:db javaImage / bin / bash"。我正在发布8080端口,原因与此问题无关。根据我的理解,它们现在应该是我的Spring Boot docker中的一个环境变量,可以通过关键字" db"来访问,它将被一个环境变量替换,该变量是MariaDB docker的实际ip
截至目前,在我的Java代码中建立连接(或者正在尝试)是使用连接字符串" jdbc:mariadb:// db:3306 / fi?user = myUsername& password = myPassword" 。这将返回错误"无法连接:未知数据库' fi'",这是奇怪的,因为如果此连接真正连接到MariaDB泊坞窗,则会找到fi数据库。
感谢任何帮助。 谢谢!
编辑:代码段
Connection connection = DriverManager.getConnection("jdbc:mariadb://mariadb:3306/fi?user=myUsername&password=myPassword");
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM ...;");
如下所示,对连接字符串进行了更改,如上所示。现在使用命令#34运行容器:运行-i -p 8080:8080 --link mariadb javaImage / bin / bash"。同样的结果,在尝试建立连接时收到此错误"无法连接:未知数据库' fi'"。
答案 0 :(得分:4)
如果容器名为mariadb,则应在url中使用它,而不是db。
jdbc:mariadb://mariadb:3306/fi?user=myUsername&password=myPassword
在你的链接上你也应该使用mariadb,
docker run -i -p 8080:8080 --link mariadb javaImage /bin/bash