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
相关推荐
JavaPub-rodert8 小时前
我又把自己的 Go 后台管理系统升级了一遍:文件管理、2GB 上传、私有文件预览、Docker 镜像全安排上了
开发语言·docker·golang·shiyuadmin
爱码少年8 小时前
嗯,腾讯云个人小站Docker镜像下载功能已下线,压力给到阿里云镜像站
docker
Zhu7589 小时前
在docker环境部署frp
运维·docker·容器
承渊政道12 小时前
飞牛NAS部署Immich:搭建家庭相册并实现远程访问
运维·服务器·docker·内网穿透·cpolar·nas·immich
x-cmd12 小时前
用 Rust 打造 AI 时代的 SQL:把重复任务变成可执行文件
数据库·人工智能·sql·ai·容器·rust·workflow
ruofu3312 小时前
如何让docker使用提前下载好的镜像,而不是在线拉取
java·spring cloud·docker
童槿顏丶1 天前
docker自动化部署脚本
docker·eureka·自动化
爱莉希雅&&&1 天前
K8s NFS+StorageClass+PV/PVC+Deployment 实战笔记
笔记·容器·kubernetes
GlueNa2SiO31 天前
06-Docker存储与数据持久化
笔记·学习·docker
一位正在转型AI全栈的前端工程师1 天前
前端转全栈:从 502 到 200,我的第一个 Docker+Nginx+Node.js 项目
docker·容器