java.sql.SQLException 在更改 UFW 设置后连接到 Docker 中的 MySQL
java.sql.SQLException when connecting to MySQL in Docker after changing UFW settings
下面是我的代码的一部分,它是 运行 在 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 设置:.
我已经尝试过的事情:
我已经打开了 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 容器可以访问外部互联网,因为它可以向 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();
}
下面是我的代码的一部分,它是 运行 在 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 设置:
我已经尝试过的事情:
我已经打开了 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 容器可以访问外部互联网,因为它可以向 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();
}