mysql - 无法在 docker 中使用 mysql 连接到数据库 sonarqube
问题描述
我尝试在 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;
```
- 声纳
```
$ 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)
...
解决方案
将 JDBC URL 环境变量中的主机更改为以下,即替换localhost
为mysql
-
-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 容器的访问将被拒绝,您可以将其更改@'%'
为允许从任何地方访问。
推荐阅读
- vue.js - 如何将 ref 作为道具传递:[Vue 警告]:无效的道具:道具“containerRef”的类型检查失败。预期对象,得到 HTMLDivElement?
- r - JAGS/BUGS 的 R 替代品
- google-sheets - 谷歌电子表格显示列中的所有值,但如果数字则替换值
- javascript - 使事件处理程序忽略子级
- java - Java Mail 方法的 JUnit 测试
- html - Angular 项目中的 CSS:位置:固定并不总是按预期运行
- python-3.x - 如何在每次迭代中写入 csv 文件
- keras - 查找微调模型的顶层
- c# - C# - 是否有理由不实例化一个类并在一行代码中使用它?
- c++ - 我在循环中用 XStoreName 杀死了我的 Linux Mint,我该如何修复它?