如何解决更改 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 举报,一经查实,本站将立刻删除。