我尝试在docker中使用mysql安装sonarqube。
- 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;
```
- 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 服务器启动失败
java.lang.IllegalStateException:无法连接到数据库。请检查连接和设置(请参阅前缀为“sonar.jdbc”的属性。)。
在 org.sonar.db.DefaultDatabase.checkConnection(DefaultDatabase.java:108)
在 org.sonar.db.DefaultDatabase.start(DefaultDatabase.java:75)
在 sun.reflect.NativeMethodAccessorImpl.invoke0( native 方法)
...
最佳答案
将 JDBC URL 环境变量中的主机更改为以下内容,即将 localhost
替换为 mysql
-
-e SONARQUBE_JDBC_URL=jdbc:mysql://mysql:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true"
原因是您使用 DNS 名称 mysql
创建了到容器 mysql
的链接,这意味着它将在 sonarqube 容器中放置 mysql 容器 IP 的主机条目。您可以通过在 sonarqube 容器中执行 docker exec
& cat/etc/hosts
来验证它。这就是在后台与 docker 进行链接的方式。
PS - 本地主机意味着容器本身,而不是 mysql 容器。
更新
您的第二个问题是,您正在授予 @'localhost'
权限,这意味着来自 sonarqube 容器的访问将被拒绝,您可以将其更改为 @'%'
允许从任何地方。
引用 - MySQL root access from all hosts
Allow all remote connections, MySQL
关于mysql - 无法在docker中使用mysql连接到数据库sonarqube,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51787274/