You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:44:52