sqlexception:在docker中连接mysql时拒绝访问

7xllpg7q  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(510)

我想将springboot应用程序部署到运行mysql的docker容器中。应用程序必须在启动过程中连接到mysql,我正在使用ormlite库。尽管该过程在容器外运行良好,但一旦我尝试在容器内部署war,就会出现以下异常:java.sql.sqlexception:access denied for user'root'@'localhost'。mysql正在运行,端口3306在dockerfile中公开。下面是我的dockerfile:

FROM mydocker:latest1
MAINTAINER DockerFan version 1.0
ADD tomcat.sh /bin/tomcat.sh
ADD application1.war /etc/apache-tomcat-9.0.12/webapps/application1.war
ADD application2.war /etc/apache-tomcat-9.0.12/webapps/application2.war
EXPOSE 8080
EXPOSE 3306
ENTRYPOINT "/bin/tomcat.sh"

而脚本tomcat.sh是:

bash /etc/init.d/mysql start 
sleep 10
bash /etc/apache-tomcat-9.0.12/bin/catalina.sh run

编辑

我编写了一个python脚本来检查mysql是否有问题,但是我成功地连接到了数据库。我还尝试了一个简单的jar,它只需要连接到db,但是错误仍然是一样的。下面是我使用的代码:

String databaseURL = "jdbc:mysql://localhost/db_name?user=root&password=password"
connection = new JdbcConnectionSource(databaseURL);
7jmck4yq

7jmck4yq1#

似乎docker或jdbc(同样使用更新版本的jdbc连接器也没有什么帮助)不喜欢使用登录时使用的同一用户连接mysql。基本上,解决方案是在mysql数据库中创建一个新用户,并使用该用户连接到数据库。下面是我使用的代码:

Driver driver = (Driver) Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
Connection conn = null;
DriverManager.getConnection("jdbc:mysql://localhost/user=newuser&password=password");
System.out.println("Connected to database");

相关问题