Docker搭建Sonarqube服务(一)

一、背景

为了保证外包项目的质量,我们需要搭建一个代码扫描的工具,减少人工review的工作量。

依旧是内网环境,只能通过外网docker镜像的方式把整个环境迁移到内网服务器上。

 

二、尝试方法(此处方法不可行)

由于新版的sonar不再支持mysql,所以我们需要使用postgresql作为替代。

因此需要使用如下两个镜像:

docker run -d --name pgdb -e POSTGRES_USER=sonar  -e POSTGRES_PASSWORD=sonar -v /data/pgdata:/var/lib/postgresql/data-d docker.io/postgres:latest

 

docker run --name sq --link pgdb -e SONARQUBE_JDBC_URL=jdbc:postgresql://pgdb:5432/sonar \
-p 9000:9000 \
-v /data/sonarqube/data:/opt/sonarqube/data \
-v /data/sonarqube/extensions:/opt/sonarqube/extensions -d sonarqube

但是在启动sonarqube时失败了,容器自动退出。

 

三、问题排查

经过网上搜索,发现有两个地方比较可疑:

1、宿主机的最大用户可用内存小于镜像需求:原因是sonar 使用了elastic search服务,后者要求可用内存上限是:262144

具体内容可见官方docker上维护sonar镜像说明 截图如下所示:

 

为了使设定永久生效,我们通过如下命令,参考了

https://www.cnblogs.com/lyrb/p/11951018.html

 

报错信息如下
  max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

临时解决办法(重启虚拟机会失效):
1.切换到root用户,执行命令:

  sysctl -w vm.max_map_count=262144

2.查看结果:

  sysctl -a|grep vm.max_map_count

3.显示:

  vm.max_map_count = 262144

永久解决办法
  在/etc/sysctl.conf文件最后添加一行:vm.max_map_count=262144

  重启虚拟机

 2、查看容器启动后的日志,定位具体问题所在

发现log中提示是数据库连不上,因此需要解决数据库的问题:

2020-06-19T03:04:48.030007092Z Caused by: java.lang.IllegalStateException: Can not connect to database. 
Please check connectivity and settings (see the properties prefixed by 'sonar.jdbc.').

 检查之后,发现应该是启动sonar时没有指定用户名和密码,因此,重新运行容器,采用另外的命令,

最终解决方案如下:

docker run \
  -d \
  --name postgres10 \
  -p 5432:5432 \
 -v /home/s/postgres/data:/var/lib/postgresql/data-d
-e POSTGRES_USER=sonar \ -e POSTGRES_PASSWORD=123456 \ #这里的用户和密码如果不指定的话,用户默认是postgres, 密码需要我们指定。 postgres:10
docker run \
  -d \
  --name sonarqube7.9 \
  -p 9000:9000 \
  --link postgres10 \
  -e SONARQUBE_JDBC_URL=jdbc:postgresql://postgres10:5432/sonar \
  -e SONARQUBE_JDBC_USERNAME=sonar \
  -e SONARQUBE_JDBC_PASSWORD=123456 \
  -v ~/sonarqube_conf:/opt/sonarqube/conf \
  -v ~/sonarqube_extensions:/opt/sonarqube/extensions \
  -v ~/sonarqube_logs:/opt/sonarqube/logs \
  -v ~/sonarqube_data:/opt/sonarqube/data \
  sonarqube:7.9.1-community

####上面指定了postgres的地址,用户名sonar,密码123456.如果不指定,那么会使用默认的sonar作为账户密码。详细可以查看sonar的dockerfile#########

上述命令运行结束之后,访问http://localhost:9000,即可看到对应的页面,访问首页,通过管理员登录,账号密码均为 :admin

 

参考:

https://www.cnblogs.com/anliven/p/12075636.html

posted @ 2020-06-19 12:17  sliec  阅读(956)  评论(0编辑  收藏  举报