SQLException:在docker

时间:2018-11-02 13:00:33

标签: mysql docker jdbc ormlite

我想将springboot应用程序部署到运行mysql的Docker容器中。该应用程序必须在启动过程中连接到mysql,而我正在使用ormlite库。即使该过程在容器外部工作正常,但一旦我尝试在容器内部部署战争,我就会收到以下异常: java.sql.SQLException:用户'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是否有问题,但是我能够成功连接到数据库。 我还尝试了一个仅需连接到db的简单jar,但错误仍然相同。这是我正在使用的代码:

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

1 个答案:

答案 0 :(得分:0)

当您尝试使用登录时使用的同一用户尝试连接mysql时,似乎docker或jdbc(也使用较新版本的jdbc连接器无济于事)。基本上,解决方案是在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");