SQLException: доступ запрещен при подключении к mysql в докере - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу развернуть приложение Springboot в Docker-контейнере, выполняющем mysql. Приложение должно подключиться к 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 

EDIT

Я написал скрипт на python, чтобы проверить, было ли что-то не так с mysql, но я смог успешно подключиться к базе данных. Я также пытался с простой банкой, которая только должна подключиться к БД, но ошибка все та же. Вот код, который я использую:

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

1 Ответ

0 голосов
/ 20 ноября 2018

Кажется, что 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");
...