Sonarqube9.9 docker 镜像启动后 conf 下的配置文件没有了

目录

[问题根源(SonarQube 9.9 Docker)](#问题根源(SonarQube 9.9 Docker))

[方案一:先导出默认配置,再挂载(推荐,需要手动改 sonar.properties 场景)](#方案一:先导出默认配置,再挂载(推荐,需要手动改 sonar.properties 场景))

[1. 临时启动容器,拷贝默认 conf 出来(不要挂载 conf)](#1. 临时启动容器,拷贝默认 conf 出来(不要挂载 conf))

[2. 赋予权限(容器内运行用户 uid=999)](#2. 赋予权限(容器内运行用户 uid=999))

[3. 正常启动并挂载 conf](#3. 正常启动并挂载 conf)

[方案二:不挂载 conf,改用环境变量传参(官方推荐生产方式)](#方案二:不挂载 conf,改用环境变量传参(官方推荐生产方式))

[方案三:使用 docker named volume(不使用宿主机路径 bind mount)](#方案三:使用 docker named volume(不使用宿主机路径 bind mount))

常见踩坑补充

快速排查命令


问题根源(SonarQube 9.9 Docker)

宿主机空目录 bind mount 挂载 /opt/sonarqube/conf,直接覆盖容器内部自带的所有配置文件。 Docker 挂载机制:宿主机空目录挂载到容器目录 → 容器内原有文件被 "遮住",看上去全部消失。

SonarQube 9.9 官方镜像不会自动把默认配置复制进空的绑定挂载目录,这是最常见坑。

方案一:先导出默认配置,再挂载(推荐,需要手动改 sonar.properties 场景)

1. 临时启动容器,拷贝默认 conf 出来(不要挂载 conf)

bash 复制代码
# 临时运行,不挂载conf
docker run --rm -d --name sonar-tmp sonarqube:9.9.0-community
# 等待10s让容器就绪,复制配置到宿主机
docker cp sonar-tmp:/opt/sonarqube/conf /data/sonarqube/
# 销毁临时容器
docker stop sonar-tmp

此时 /data/sonarqube/conf 内就有完整:sonar.properties、wrapper.conf、logback.xml

2. 赋予权限(容器内运行用户 uid=999)

复制代码
chown -R 999:999 /data/sonarqube/conf

3. 正常启动并挂载 conf

复制代码
docker run -d --name sonarqube9.9 \
-p 9000:9000 \
-v /data/sonarqube/conf:/opt/sonarqube/conf \
-v /data/sonarqube/data:/opt/sonarqube/data \
-v /data/sonarqube/logs:/opt/sonarqube/logs \
-v /data/sonarqube/extensions:/opt/sonarqube/extensions \
-e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true \
sonarqube:9.9.0-community

⚠️ 重点:宿主机 conf 目录必须预先存在文件,不能是空目录直接挂载

方案二:不挂载 conf,改用环境变量传参(官方推荐生产方式)

SonarQube Docker 官方不建议 bind mount conf 目录 ,升级版本容易出现配置兼容问题。 所有 sonar.properties 参数可以直接用环境变量注入: 规则:前缀 SONAR_ + 属性名,. 换成 _ 示例:

复制代码
-e SONAR_JDBC_URL="jdbc:postgresql://postgres:5432/sonar"
-e SONAR_JDBC_USERNAME="sonar"
-e SONAR_JDBC_PASSWORD="xxx"
-e SONAR_WEB_CONTEXT="/sonar"

优点:不需要挂载 conf 目录,不会出现配置文件丢失问题,compose 维护更干净。

方案三:使用 docker named volume(不使用宿主机路径 bind mount)

复制代码
docker volume create sonar_conf
# 先初始化volume配置
docker run --rm -v sonar_conf:/opt/sonarqube/conf sonarqube:9.9.0-community
# 正式启动挂载命名卷
-v sonar_conf:/opt/sonarqube/conf

缺点:命名卷路径很深,不方便直接在宿主机编辑文件。

常见踩坑补充

  1. 权限问题 挂载后即便有文件,启动报错无法读取配置:宿主机目录属主必须改成 999

    chown -R 999:999 /data/sonarqube

CentOS/RHEL 开启 SELinux 可加上挂载标识 :z -v /data/sonarqube/conf:/opt/sonarqube/conf:z

  1. 不要直接新建空 sonar.properties 缺少大量默认配置项,启动会异常,务必从镜像复制原始模板修改。

  2. Compose 完整可用模板(先执行方案一导出 conf 再使用)

    version: "3.8"
    services:
    sonarqube:
    image: sonarqube:9.9.0-community
    container_name: sonarqube9.9
    ports:
    - "9000:9000"
    environment:
    SONAR_ES_BOOTSTRAP_CHECKS_DISABLE: "true"
    volumes:
    - /data/sonarqube/conf:/opt/sonarqube/conf
    - /data/sonarqube/data:/opt/sonarqube/data
    - /data/sonarqube/logs:/opt/sonarqube/logs
    - /data/sonarqube/extensions:/opt/sonarqube/extensions
    ulimits:
    nofile:
    soft: 65536
    hard: 65536

快速排查命令

复制代码
# 进入容器查看内部原始conf(不挂载时)
docker exec -it sonarqube ls /opt/sonarqube/conf

# 确认挂载是否生效
docker inspect sonarqube | grep Mounts -A20
相关推荐
ruofu331 小时前
wsl端是py312,但是项目是py311, 如何下载py311的依赖包(wheels)
python·docker
spider_xcxc2 小时前
Docker 实战:容器化多服务应用,Dockerfile 与 Compose 配置全解析
docker·云原生·eureka·虚拟化·容器化
hay_lee3 小时前
Kubernetes StatefulSet:OrderedReady 极简指南
云原生·容器·kubernetes
晚风吹长发3 小时前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
ShiXZ2133 小时前
Docker Compose 安装与配置指南
运维·docker·容器
BullSmall4 小时前
Anolis OS 8.10 Docker 部署 SonarQube 9.9 完整教程
运维·docker·容器
java_logo8 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris
生活爱好者!21 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
java_logo21 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程