Docker部署SonarQube启动后异常停止无报错日志求助
SonarQube容器启动后自动停止的排查与解决
针对你在Amazon Linux 2023 EC2实例上部署SonarQube时遇到的容器启动后停止、日志卡在等待Elasticsearch的问题,以下是常见的排查方向和解决方法:
1. 调整系统虚拟内存参数(最可能的原因)
Elasticsearch运行要求系统的vm.max_map_count参数至少为262144,而Amazon Linux 2023的默认值通常不满足这个要求。
- 临时生效(重启实例后失效):
sysctl -w vm.max_map_count=262144
- 永久生效:
编辑/etc/sysctl.conf文件,添加或修改一行:
vm.max_map_count=262144
执行sysctl -p让配置立即生效。
2. 提升文件描述符限制
Elasticsearch需要足够的文件描述符配额,默认系统限制可能不足:
- 临时生效:
ulimit -n 65535
- 永久生效:
编辑/etc/security/limits.conf,添加以下内容:
* soft nofile 65535 * hard nofile 65535
同时配置Docker daemon继承该限制,创建或编辑/etc/docker/daemon.json:
{ "default-ulimits": { "nofile": { "hard": 65535, "soft": 65535 } } }
重启Docker服务:
systemctl restart docker
3. 等待PostgreSQL服务完全就绪
depends_on仅保证PostgreSQL容器启动,不确保数据库服务已就绪,可能导致SonarQube连接失败退出。修改docker-compose.yml,为PostgreSQL添加健康检查,并让SonarQube等待其健康:
version: "3" services: sonarqube: image: sonarqube:community depends_on: db: condition: service_healthy 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: - "9000:9000" db: image: postgres:12 environment: POSTGRES_USER: sonar POSTGRES_PASSWORD: sonar volumes: - postgresql:/var/lib/postgresql - postgresql_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U sonar"] interval: 5s timeout: 5s retries: 5 volumes: sonarqube_data: sonarqube_extensions: sonarqube_logs: postgresql: postgresql_data:
4. 排查Docker卷权限问题
如果是首次部署,可能卷的权限配置错误导致SonarQube进程无法读写目录。可以删除现有卷后重新部署(注意:会丢失所有数据,仅适用于新环境):
docker-compose down -v docker-compose up -d
5. 查看Elasticsearch详细日志
SonarQube主日志未显示错误,但Elasticsearch可能有异常输出。可以查看容器内的Elasticsearch日志:
# 获取已停止的SonarQube容器ID docker ps -a | grep sonarqube # 查看容器日志 docker logs <容器ID> # 或直接查看容器内的Elasticsearch日志文件(如果容器还能进入) docker exec -it <容器ID> cat /opt/sonarqube/logs/elasticsearch.log
内容的提问来源于stack exchange,提问作者Eugene
相关产品推荐
相关产品推荐

