Не удается подключиться к базе данных sonarqube с помощью mysql в докере

Я пытаюсь установить sonarqube с mysql в докере.

  1. MySQL

`` ''

$ docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql mysql
$ docker exec -it mysql bash
# mysql -uroot -proot
mysql> CREATE DATABASE sonar CHARACTER SET utf8;
mysql> CREATE USER 'sonar'@'localhost' IDENTIFIED BY 'sonar' PASSWORD EXPIRE NEVER;
mysql> GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'localhost';
mysql> FLUSH PRIVILEGES;

`` ''

  1. SonarQube

`` ''

$ docker run -d --name SonarQube --link mysql:mysql -p 9000:9000 -p 9092:9092 \
-e SONARQUBE_JDBC_USERNAME=sonar \
-e SONARQUBE_JDBC_PASSWORD=sonar \
-e "SONARQUBE_JDBC_URL=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true" \
  sonarqube

`` ''

Вот мой журнал ошибок. Дай мне решение. Спасибо

2018.08.10 12:53:37 ERROR web[][o.s.s.p.Platform] Web server startup failed java.lang.IllegalStateException: Can not connect to database. Please check connectivity and settings (see the properties prefixed by 'sonar.jdbc.'). at org.sonar.db.DefaultDatabase.checkConnection(DefaultDatabase.java:108) at org.sonar.db.DefaultDatabase.start(DefaultDatabase.java:75) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ...

0
0
2 782
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Измените хост в переменной среды URL JDBC на ниже, т.е. замените localhost на mysql -

-e SONARQUBE_JDBC_URL=jdbc:mysql://mysql:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true"

Причина в том, что вы создали ссылку на контейнер mysql с DNS-именем mysql, что означает, что он поместит запись хоста для IP-адреса контейнера mysql в контейнер sonarqube. Вы можете проверить это, выполнив docker exec и cat /etc/hosts в контейнере sonarqube. Вот как работает связывание с докером в фоновом режиме.

PS - Localhost означает сам контейнер, а не контейнер mysql.

Обновлять

Вторая проблема заключается в том, что вы предоставляете привилегии для @'localhost', что означает, что доступ из контейнера sonarqube будет запрещен, вы можете изменить его на @'%', чтобы разрешить его откуда угодно.

Ссылка - Root-доступ к MySQL со всех хостов
Разрешить все удаленные подключения, MySQL

Спасибо за ответ. Но я все равно получаю ту же ошибку.

SaeHyun Kim 10.08.2018 15:19

Уничтожьте все контейнеры и начните заново. Это должно работать. Если он не публикует содержимое /etc/hosts в вашем вопросе после ссылки.

vivekyad4v 10.08.2018 15:20

root @ 9b5ddc2ee125: / # cat / etc / hosts 127.0.0.1 localhost :: 1 localhost ip6-localhost ip6-loopback fe00 :: 0 ip6-localnet ff00 :: 0 ip6-mcastprefix ff02 :: 1 ip6-allnodes ff02 :: 2 ip6-allrouters 172.17.0.3 9b5ddc2ee125

SaeHyun Kim 10.08.2018 15:24

У него нет записи для контейнера mysql. Я пробовал это, и у меня это сработало. Ссылка - --link="" : Add link to another container (<name or id>:alias or <name or id>) Doc - docs.docker.com/samples/library/mysql/…

vivekyad4v 10.08.2018 15:30

Я не вижу здесь других проблем. Я построил его с нуля в своем окружении, и он у меня работает.

vivekyad4v 10.08.2018 15:34

Обновил ответ. Я попытался воспроизвести это и обнаружил проблему с разрешением, предложил решение, попробую.

vivekyad4v 10.08.2018 16:03

Я еще не решил. Но я понял твой ответ. Спасибо

SaeHyun Kim 11.08.2018 15:47

Другие вопросы по теме