首页 > 解决方案 > 无法在 docker 中使用 mysql 连接到数据库 sonarqube

问题描述

我尝试在 docker 中使用 mysql 安装 sonarqube。

  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. 声纳

```

$ 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) ...

标签: mysqldockersonarqube

解决方案


将 JDBC URL 环境变量中的主机更改为以下,即替换localhostmysql-

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

mysql原因是您使用 DNS 名称创建了指向容器的链接,mysql这意味着它将在 sonarqube 容器中放置 mysql 容器 IP 的主机条目。您可以通过在 sonarqube 容器中执行docker exec&来验证它。cat /etc/hosts这就是在后台使用 docker 进行链接的方式。

PS - 本地主机是指容器本身而不是 mysql 容器。

更新

您的第二个问题是,您正在授予权限,@'localhost'这意味着来自 sonarqube 容器的访问将被拒绝,您可以将其更改@'%'为允许从任何地方访问。

Ref -来自所有主机的 MySQL 根访问权限
允许所有远程连接,MySQL


推荐阅读