如何连接java容器和mysql容器?

2uluyalo  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(508)

我正在阅读官方文件,并停留在以下步骤

文档中使用的应用程序支持以下环境变量 MYSQL_HOSTMYSQL_USER 等等,但我的程序是java,不支持它们。相反,我在java代码中使用以下连接字符串连接到db:

return new DefaultConfiguration().set(DriverManager.getConnection(
                                            "jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC",
                                            "root",
                                            "111111"))
                                 .set(SQLDialect.MYSQL);

那么我应该如何更改连接字符串呢?因为现在连接失败,如下所示

Jul 05, 2021 12:31:35 AM org.jooq.tools.JooqLogger error

SEVERE: Error in file: /app/build/tmp/generateJooq/config.xml. Error : Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

对于 host ,我应该把它改成 localhost ? 我跑 select user(); 在mysql命令行中,并得到以下结果

+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+

这是否意味着主持人是 localhost ?
但是我跑的时候, show variables; 价值 hostname1f1632505b1f ,那么为什么有两个主机名呢?
对于端口,我检查了mysql映像,它公开了 3306 ,所以我认为这部分我不需要改变,对吗?
对于db名称,我创建了一个名为 test 所以我认为这部分应该是好的。用户名和密码也一样。
检查mysql容器:
my.cnf 文件指定 bind-address=0.0.0.0 :

mysql容器的日志:

qxsslcnc

qxsslcnc1#

您可能需要将mysql服务器配置为侦听所有地址,例如,在docker容器中编辑此文件

/etc/mysql/my.cnf

并具体说明

bind-address=0.0.0.0

另见https://serverfault.com/q/139323

ipakzgxi

ipakzgxi2#

结果是我忘了先运行迁移。。。
在我的 Dockerfile ,我应该跑的 ./gradlew flywayMigrate 然后 ./gradlew runApp (这是一项类型为的任务 JavaExec ),但我忘记了前者,因此出现了错误。
与直觉相反的是,错误只提到数据库连接失败,而没有提到迁移。。
谢谢你的帮助!

相关问题