微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更改 UFW 设置后在 Docker 中连接到 MySQL 时出现 java.sql.SQLException

如何解决更改 UFW 设置后在 Docker 中连接到 MySQL 时出现 java.sql.SQLException

以下是我在 Docker 容器内运行的代码的一部分。我之前已经创建了变量。

String MysqLUrl = "jdbc:MysqL://" + MysqLHost + "/" + MysqLDatabase + "?user=" + MysqLUser + "&password=" + MysqLPass;
try {
    MysqLConnection = DriverManager.getConnection(MysqLUrl);
} catch (sqlException e) {
    e.printstacktrace();
}

错误如下:

java.sql.sqlException: Access denied for user 'myusername'@'_gateway' (using password: YES)

让我解释一下我做了什么:

我的代码运行良好。但是,在我对 UFW 设置进行了一些更改后,告诉 UFW 管理对所有 Docker 容器的传入请求,该错误发生了。我按照这个答案修改了 UFW 设置:https://stackoverflow.com/a/51741599/14772173

我已经尝试过的事情:

我已经打开了UFW 3306端口,可以确认我的MysqL用户名密码正确,我的数据库接受所有IP地址的远程连接。

bind-address = 0.0.0.0

MariaDB [(none)]> SELECT User,Host FROM MysqL.user WHERE Host <> '';
+-----------------+-----------+
| User            | Host      |
+-----------------+-----------+
| myusername      | %         |
| root            | localhost |
+-----------------+-----------+
2 rows in set (0.001 sec)

我可以确认我的 Docker 容器可以访问外部 Internet,因为它可以向 google.com 发送请求,并且可以响应来自 ping 工具和状态监视器的请求。

请帮助解释为什么我的代码无法连接到 Docker 之外的 MysqL 数据库,以及我该如何解决这个问题。非常感谢。

解决方法

指定如下端口号后,我的代码就可以工作了。我认为端口号是可选的。

String mysqlUrl = "jdbc:mysql://" + mysqlHost + ":3306/" + mysqlDatabase + "?user=" + mysqlUser + "&password=" + mysqlPass;
try {
    mysqlConnection = DriverManager.getConnection(mysqlUrl);
} catch (SQLException e) {
    e.printStackTrace();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。