SonarQube™是一个开源质量管理平台,用于分析和度量代码的技术质量。它使开发人员能够在早期阶段检测代码问题、漏洞和缺陷。
本打包的SonarQube Docker镜像基于***SonarQube社区版二进制文件,但包含一些额外功能和插件,以增强其功能和可用性。
SonarQube™概述
获取SonarQube Docker镜像的推荐方式是从Docker Hub仓库拉取预构建镜像。
要使用特定版本,可以拉取带版本标签的镜像。您可以在Docker Hub仓库中查看可用版本列表。
25, 25.9, latest (sonarqube/Dockerfile)支持的架构:
linux/amd64linux/arm64SonarQube™需要访问PostgreSQL数据库来存储信息。您可以使用任何PostgreSQL数据库服务器,无论是在单独的容器中运行还是在远程主机上。
该仓库包含一个示例docker-compose.yml文件,展示了如何通过Docker Compose使用***PostgreSQL Docker镜像运行SonarQube。
SonarQube实例将可通过http://localhost:9000访问(如果不是在本地运行Docker,则为http://<your-docker-host-ip>:9000)。可以通过修改docker-compose.yml文件的ports部分更改端口。此外,您可以通过设置SONARQUBE_PORT_NUMBER环境变量更改容器内的端口。
启动SonarQube镜像时,您可以通过在docker-compose文件或docker run命令行中传递一个或多个环境变量来调整实例配置。
以下部分描述了用于配置SonarQube实例的可用环境变量。
| 名称 | 描述 | 默认值 |
|---|---|---|
SONARQUBE_DEBUG | 启用调试模式。 | no |
SONARQUBE_LOG_LEVEL | 设置日志级别。支持的值:TRACE、DEBUG、INFO。 | INFO(如果启用SONARQUBE_DEBUG,日志级别将设置为DEBUG) |
SONARQUBE_LOG_ROLLING_POLICY | 设置日志滚动策略。使用time:yyyy-MM-dd进行每日轮换,size:10MB进行基于大小的轮换,或none禁用日志轮换。 | size:10MB |
SONARQUBE_LOG_MAX_FILES | 设置要保留的最大文件数。如果SONARQUBE_LOG_ROLLING_POLICY为none,此属性将被忽略。 | 3 |
SONARQUBE_MOUNTED_PROVISIONING_DIR | SonarQube初始配置目录。 | /sonarqube-provisioning |
SONARQUBE_DATA_TO_PERSIST | 相对于SonarQube安装目录的要持久化的文件。若要提供多个值,请用空格分隔。 | ${SONARQUBE_DATA_DIR} ${SONARQUBE_EXTENSIONS_DIR} ${SONARQUBE_LOGS_DIR} |
SONARQUBE_PORT_NUMBER | SonarQube Web应用程序端口号。 | 9000 |
SONARQUBE_ELASTICSEARCH_PORT_NUMBER | SonarQube Elasticsearch应用程序端口号。 | 9001 |
SONARQUBE_START_TIMEOUT | 应用程序启动超时时间(秒)。 | 300 |
SONARQUBE_SKIP_BOOTSTRAP | 是否执行应用程序的初始引导。 | no |
SONARQUBE_SKIP_MIGRATION | 当SonarQube版本更新时是否执行迁移。否则,如果跳过迁移,系统将无法运行,需手动执行步骤。 | no |
SONARQUBE_WEB_CONTEXT | 访问应用程序的SonarQube前缀。 | / |
SONARQUBE_WEB_URL | SonarQube服务器的HTTP(S) URL,例如[***]。此值用于创建电子邮件或拉取请求装饰中的链接。 | nil |
SONARQUBE_MAX_HEAP_SIZE | SonarQube服务(CE、Search和Web)的最大堆大小。 | nil |
SONARQUBE_MIN_HEAP_SIZE | SonarQube服务(CE、Search和Web)的最小堆大小。 | nil |
SONARQUBE_CE_JAVA_ADD_OPTS | 计算引擎的额外Java选项。 | nil |
SONARQUBE_ELASTICSEARCH_JAVA_ADD_OPTS | Elasticsearch的额外Java选项。 | nil |
SONARQUBE_WEB_JAVA_ADD_OPTS | Web的额外Java选项。 | nil |
SONARQUBE_EXTRA_PROPERTIES | 要在sonar.properties文件中设置的属性的逗号分隔列表,例如my.sonar.property1=property_value,my.sonar.property2=property_value。 | nil |
SONARQUBE_EXTRA_SETTINGS | 要在“管理 -> 配置 -> 常规设置”中设置的设置的逗号分隔列表,例如sonar.lf.enableGravatar=false,sonar.lf.logoUrl=[***]。 | nil |
SONARQUBE_USERNAME | SonarQube用户名。 | admin |
SONARQUBE_PASSWORD | SonarQube用户密码。 | Admin.*** |
SONARQUBE_EMAIL | SonarQube用户电子邮件地址。 | *** |
SONARQUBE_SMTP_HOST | SonarQube SMTP服务器主机。 | nil |
SONARQUBE_SMTP_PORT_NUMBER | SonarQube SMTP服务器端口号。 | nil |
SONARQUBE_SMTP_USER | SonarQube SMTP服务器用户。 | nil |
SONARQUBE_SMTP_PASSWORD | SonarQube SMTP服务器用户密码。 | nil |
SONARQUBE_SMTP_PROTOCOL | SonarQube SMTP服务器使用的协议。 | nil |
SONARQUBE_EMAIL_FROM_ADDRESS | 电子邮件将从此地址发送,例如***。 | $SONARQUBE_EMAIL |
SONARQUBE_EMAIL_FROM_NAME | 电子邮件将从此地址名称发送,例如SonarQube。 | nil |
SONARQUBE_DATABASE_HOST | 数据库服务器主机。 | $SONARQUBE_DEFAULT_DATABASE_HOST |
SONARQUBE_DATABASE_PORT_NUMBER | 数据库服务器端口。 | 5432 |
SONARQUBE_DATABASE_NAME | 数据库名称。 | sonarqube_db |
SONARQUBE_DATABASE_USER | 数据库用户名。 | sonarqube |
SONARQUBE_DATABASE_PASSWORD | 数据库用户密码。 | nil |
SONARQUBE_PR_PLUGIN_RESOURCES_URL | 用于加载PR评论图像的基础URL。如果变量定义为空,图像链接将引用sonar.core.serverBaseURL。 | [***]{SONARQUBE_PR_PLUGIN_VERSION}/src/main/resources/static |
[!NOTE] 可以使用_FILE后缀提供环境变量。值将从环境变量指定的文件中读取,遵循标准Docker密钥处理机制。 这允许您将敏感数据(如密码)安全地注入容器,而无需直接在环境变量中公开它们。
| 名称 | 描述 | 值 |
|---|---|---|
SONARQUBE_HOME | SonarQube安装目录。 | /opt/sonarqube |
SONARQUBE_DATA_DIR | SonarQube数据文件目录。 | ${SONARQUBE_HOME}/data |
SONARQUBE_EXTENSIONS_DIR | SonarQube扩展目录。 | ${SONARQUBE_HOME}/extensions |
SONARQUBE_CONF_DIR | SonarQube配置文件目录。 | ${SONARQUBE_HOME}/conf |
SONARQUBE_CONF_FILE | SonarQube配置文件。 | ${SONARQUBE_CONF_DIR}/sonar.properties |
SONARQUBE_LOGS_DIR | SonarQube日志文件目录。 | ${SONARQUBE_HOME}/logs |
SONARQUBE_LOG_FILE | SonarQube日志文件。 | ${SONARQUBE_LOGS_DIR}/sonar.log |
SONARQUBE_TMP_DIR | SonarQube临时文件目录。 | ${SONARQUBE_HOME}/temp |
SONARQUBE_PID_DIR | SonarQube PID文件目录。 | ${SONARQUBE_HOME}/pids |
SONARQUBE_BIN_DIR | SonarQube二进制可执行文件目录。 | ${SONARQUBE_HOME}/bin/linux-x86-64 |
SONARQUBE_VOLUME_DIR | SonarQube挂载配置文件目录。 | /sonarqube |
SONARQUBE_DAEMON_USER | SonarQube系统用户。 | sonarqube |
SONARQUBE_DAEMON_USER_ID | SonarQube系统用户ID。 | 1001 |
SONARQUBE_DAEMON_GROUP | SonarQube系统组。 | sonarqube |
SONARQUBE_DAEMON_GROUP_ID | SonarQube系统组ID。 | 1001 |
SONARQUBE_DEFAULT_DATABASE_HOST | 默认数据库服务器主机。 | postgresql |
如果删除容器,所有数据都将丢失,下次运行镜像时数据库将重新初始化。为避免数据丢失,应挂载一个在容器删除后仍能持久化的卷。
为实现持久化,应在/sonarqube路径挂载目录。如果挂载的目录为空,将在首次运行时初始化。此外,还应挂载PostgreSQL数据卷以实现持久化。
若要避免意外删除卷,可以将主机目录挂载为数据卷。或者,您可以使用卷插件托管卷数据。
按照本仓库中包含的Docker Compose示例,您可以修改docker-compose.yml文件,使用主机目录而非Docker命名卷。以下是修改示例:
diffsonarqube-db: ... volumes: - - sonarqube_db:/var/lib/postgresql + - /path/to/sonarqube/db:/var/lib/postgresql ... sonarqube: ... volumes: - - sonarqube:/sonarqube + - /path/to/sonarqube/data:/sonarqube ... -volumes: - sonarqube_db: - driver: local - sonarqube: - driver: local
使用主机目录进行持久化时,请注意此容器以非root用户运行。因此,任何挂载的文件和目录必须具有UID 1001的正确权限。建议在首次运行Docker之前创建目录并设置正确的权限或所有权,以确保Docker不会以不兼容的权限创建它。
如果权限设置不正确,您可能会在容器日志中看到如下错误消息:mkdir: cannot create directory ‘/sonarqube/data’: Permission denied
您可以使用以下命令将所有权设置为1001:1001:
console$ mkdir -p /path/to/sonarqube $ chown -R 1001:1001 /path/to/sonarqube
或者,您可以将权限设置为777(所有人可读、可写、可执行):
console$ mkdir -p /path/to/sonarqube $ chmod -R 777 /path/to/sonarqube
SonarQube镜像包含健康检查命令,用于验证SonarQube Web应用程序是否正常运行。健康检查尝试连接到SonarQube,并通过查询/api/system/status端点分析应用程序状态。当应用程序状态为UP或通过health-check命令行工具的-s选项提供的任何其他状态时,健康检查将成功。
console$ health-check -h 用于检查SonarQube是否健康的工具。 用法: health-check [选项] ... 部分选项包括: -u <HEALTH_CHECK_URL> 用于检查SonarQube状态的URL。(可选) -s <STATUS> 重复此选项可添加更多有效状态。可能的状态: - STARTING: 服务器初始化进行中 - UP: SonarQube实例正常运行(始终作为有效状态添加) - DOWN: 实例已启动但未运行(例如,由于迁移失败) - RESTARTING: 已请求重启 - DB_MIGRATION_NEEDED: 需要数据库迁移 - DB_MIGRATION_RUNNING: 数据库迁移进行中 -h 显示此帮助并退出 示例: - health-check - health-check -u [***] - health-check -s STARTING -s RESTARTING - health-check -s DB_MIGRATION_NEEDED -s DB_MIGRATION_RUNNING
此命令默认不运行。您可以在容器内手动运行它,或添加到编排工具(如Docker Compose、Kubernetes等)中监控SonarQube实例的健康状态。
例如,要将健康检查添加到docker-compose.yml文件,可以使用以下配置:
yamlservices: sonarqube: # ... healthcheck: test: health-check start_period: 3m start_interval: 10s interval: 1m timeout: 10s retries: 3
[!IMPORTANT] 如果SonarQube实例未完全启动(包括需要数据库迁移或迁移进行中),健康检查将失败。如果将
SONARQUBE_SKIP_MIGRATION环境变量设置为yes,建议使用-s DB_MIGRATION_NEEDED -s DB_MIGRATION_RUNNING选项将这些状态视为健康。
如果您对此镜像有任何问题或疑问,请通过GitHub issue与我联系。

来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429