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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM