
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
SonarQube™是一个开源质量管理平台,用于分析和度量代码的技术质量。它使开发人员能够在早期阶段检测代码问题、漏洞和缺陷。
本打包的SonarQube Docker镜像基于官方SonarQube社区版二进制文件,但包含一些额外功能和插件,以增强其功能和可用性。
https://www.sonarqube.org
获取SonarQube Docker镜像的推荐方式是从https://hub.docker.com/r/adrianmusante/sonarqube%E6%8B%89%E5%8F%96%E9%A2%84%E6%9E%84%E5%BB%BA%E9%95%9C%E5%83%8F%E3%80%82
要使用特定版本,可以拉取带版本标签的镜像。您可以在Docker Hub仓库中查看https://hub.docker.com/r/adrianmusante/sonarqube/tags/%E3%80%82
支持的架构:
linux/amd64linux/arm64SonarQube™需要访问PostgreSQL数据库来存储信息。您可以使用任何PostgreSQL数据库服务器,无论是在单独的容器中运行还是在远程主机上。
该仓库包含一个示例https://github.com/adrianmusante/docker-sonarqube/blob/main/docker-compose.example.yml%E6%96%87%E4%BB%B6%EF%BC%8C%E5%B1%95%E7%A4%BA%E4%BA%86%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87https://docs.docker.com/compose/%E4%BD%BF%E7%94%A8%E5%AE%98%E6%96%B9https://hub.docker.com/_/postgres%E8%BF%90%E8%A1%8CSonarQube%E3%80%82
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,例如https://yourhost.yourdomain/sonar。此值用于创建电子邮件或拉取请求装饰中的链接。 | 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=https://mysonar.com/logo。 | nil |
SONARQUBE_USERNAME | SonarQube用户名。 | admin |
SONARQUBE_PASSWORD | SonarQube用户密码。 | Admin.123456 |
SONARQUBE_EMAIL | SonarQube用户电子邮件地址。 | user@example.com |
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 | 电子邮件将从此地址发送,例如noreply@sonarsource.com。 | $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。 | https://cdn.jsdelivr.net/gh/mc1arke/sonarqube-community-branch-plugin@${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数据卷以实现持久化。
若要避免意外删除卷,可以https://docs.docker.com/engine/tutorials/dockervolumes/%E3%80%82%E6%88%96%E8%80%85%EF%BC%8C%E6%82%A8%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E5%8D%B7%E6%8F%92%E4%BB%B6%E6%89%98%E7%AE%A1%E5%8D%B7%E6%95%B0%E6%8D%AE%E3%80%82
按照本仓库中包含的Docker Compose示例,您可以修改https://github.com/adrianmusante/docker-sonarqube/blob/main/docker-compose.example.yml%E6%96%87%E4%BB%B6%EF%BC%8C%E4%BD%BF%E7%94%A8%E4%B8%BB%E6%9C%BA%E7%9B%AE%E5%BD%95%E8%80%8C%E9%9D%9EDocker%E5%91%BD%E5%90%8D%E5%8D%B7%E3%80%82%E4%BB%A5%E4%B8%8B%E6%98%AF%E4%BF%AE%E6%94%B9%E7%A4%BA%E4%BE%8B%EF%BC%9A
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 http://my-host:9000/api/system/status - 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选项将这些状态视为健康。
如果您对此镜像有任何问题或疑问,请通过https://github.com/adrianmusante/docker-sonarqube/issues%E4%B8%8E%E6%88%91%E8%81%94%E7%B3%BB%E3%80%82
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 adrianmusante/sonarqube 相关的常用 Docker 镜像,适用于 不同场景 等不同场景: