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

Docker环境下SonarScanner无法连接SonarQube服务求助

Docker下SonarScanner无法连接SonarQube的问题修复

问题根源

  1. 容器内localhost指向错误:在Docker Compose的同一网络中,每个容器的localhost仅指代容器自身。你配置的SonarScanner容器里访问http://localhost:9000,实际是在尝试连接自己的9000端口,而非SonarQube容器的服务。同一Docker网络下,容器间可直接通过服务名访问,也就是你配置里的sonarqube。
  2. 服务启动顺序问题:depends_on仅保证容器的启动顺序,不会等待SonarQube服务完全就绪。SonarQube启动需要加载数据库、完成初始化,耗时比Scanner长,导致Scanner启动时SonarQube还没准备好接收请求。

修改后的docker-compose.yml配置

重点修正SonarScanner的SONAR_HOST_URL,同时添加健康检查确保SonarQube就绪后再启动Scanner(可选,但更稳妥):

version: '3'

services:
  sonarqube:
    image: sonarqube:latest
    ports:
      - "9000:9000"
    networks:
      - sonarnet
    environment:
      - SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar
      - SONARQUBE_JDBC_USERNAME=sonar
      - SONARQUBE_JDBC_PASSWORD=sonar
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_logs:/opt/sonarqube/logs
      - sonarqube_extensions:/opt/sonarqube/extensions
    depends_on:
      - db
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:9000/api/system/status || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 5

  db:
    image: postgres:latest
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=sonar
      - POSTGRES_DB=sonar
    volumes:
      - postgresql:/var/lib/postgresql
    networks:
      - sonarnet
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U sonar"]
      interval: 30s
      timeout: 10s
      retries: 5

  sonarscanner:
    image: sonarsource/sonar-scanner-cli
    volumes:
      - ./payment-and-transaction:/usr/src
    environment:
      - SONAR_PROJECT_KEY=payment-and-transaction
      - SONAR_HOST_URL=http://sonarqube:9000  # 替换为服务名
      - SONAR_LOGIN=xxxxxxxxxxxxxxxxxx  # 去掉引号,避免解析异常
    networks:
      - sonarnet
    depends_on:
      sonarqube:
        condition: service_healthy  # 等待SonarQube健康检查通过再启动

volumes:
  sonarqube_data:
  sonarqube_logs:
  sonarqube_extensions:
  postgresql:

networks:
  sonarnet:

额外操作建议

  • 若不想配置健康检查,可手动分步启动服务:
    1. 先启动SonarQube和数据库:
      docker-compose up -d sonarqube db
      
    2. 等待5-10分钟(根据机器性能调整),确认浏览器访问http://localhost:9000能正常打开SonarQube页面后,再启动Scanner:
      docker-compose up sonarscanner
      

错误日志解析

你看到的Connection refused (Connection refused),是因为SonarScanner容器尝试连接自身的127.0.0.1:9000,但该端口并未监听SonarQube服务,导致连接被拒绝。将地址改为服务名后,Docker内置DNS会自动解析到SonarQube容器的IP,即可正常通信。

内容的提问来源于stack exchange,提问作者Usman Iqbal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:03:09