【发布时间】:2017-12-01 23:32:27
【问题描述】:
我有两个 Docker 容器。一种是基于标准的 MariaDB 映像。该容器名为“mariadb”,其中有一个名为“fi”的数据库。 fi db 里面有几个表,每个表都有几行数据。使用 DataGrip 或任何其他数据库查看软件,我可以成功地访问和查询该数据库,在本地主机上使用端口 3306 调用它。
我的第二个 Docker 容器运行一个 Spring Boot 应用程序,它需要访问 MariaDB 中的数据。如果我在 docker 中运行 MariaDB,并在主机上运行 Spring Boot 应用程序,我可以使用连接字符串成功访问 docker 中的 MariaDB:“jdbc:mariadb://localhost:3306/?user=myUsername&password=myPassword ”。我的问题是,当我尝试在单独的 Docker 中运行它们时,Spring Boot 应用程序无法访问数据库。我发现很多人说要“链接”两个码头工人,但这似乎并没有解决问题。当我运行 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 docker,则会找到 fi 数据库。
感谢任何帮助。 谢谢!
编辑:代码片段
Connection connection = DriverManager.getConnection("jdbc:mariadb://mariadb:3306/fi?user=myUsername&password=myPassword");
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM ...;");
按照以下建议更改连接字符串,如上所示。现在使用命令“run -i -p 8080:8080 --link mariadb javaImage /bin/bash”运行容器。结果相同,尝试建立连接时收到此错误“无法连接:未知数据库'fi'”。
【问题讨论】:
-
同时,我建议您根据指南格式化您的问题,尤其是引用代码 sn-ps。
标签: mysql spring docker spring-boot mariadb