当 SonarQube 出现 vm.max_map_count 错误时的解决方法
当我在使用docker-compose启动SonarQube时遇到了有关vm.max_map_count的错误,并且遇到了困难,所以我决定记录下一些备忘录。
SonarQube的启动
创建下面的docker-compose.yml文件。由于9000端口已被另一个应用程序(MinIO)使用,所以改用9999端口。
version: "3"
services:
sonarqube:
image: sonarqube:community
hostname: sonarqube
container_name: sonarqube
depends_on:
- db
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
ports:
- "0.0.0.0:9999:9000"
db:
image: postgres:13
hostname: postgresql
container_name: postgresql
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
postgresql:
postgresql_data:
通过以下脚本启动。
#!/bin/bash
set -ex
if [ "$1" == "up" ]; then
docker-compose up -d --build
elif [ "$1" == "down" ]; then
docker-compose down
fi
在这种情况下,即使通过localhost:9999进行curl也无法连接。
使用docker logs来核实状态。
$ docker logs 862e55b4b91e
:(省略)
[2023/04/24 8:23:55.829 AM] bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2023/04/24 8:23:55.829 AM] ERROR: Elasticsearch did not exit normally - check the logs at /opt/sonarqube/logs/sonarqube.log
:(省略)
2023.04.23 23:36:03 INFO app[][o.s.a.SchedulerImpl] Process[ElasticSearch] is stopped
2023.04.23 23:36:03 INFO app[][o.s.a.SchedulerImpl] SonarQube is stopped
ElasticSearch崩溃了。进程似乎缺少可用的映射区域。
搜索后找到以下文献。
Elasticsearch的max_map_count参数的更改。
在/etc/sysctl.conf文件中添加vm.max_map_count = 262144,然后重新启动系统。这次,curl成功运行了。
$ curl localhost:9999
<!DOCTYPE html>
<html lang="en">
:(省略)