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
相关推荐
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
分布式存储与RustFS2 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
玉&心3 天前
通过Arthas在线诊断K8S中的内存及JVM等使用情况
docker·k8s·arthas
xing-xing3 天前
Docker容器中Nginx站点根目录网页配置访问
nginx·docker
赵文宇(温玉)3 天前
CoreDNS的hosts插件的缺行配置导致k8s集群异常
容器·kubernetes·rancher
guo_wen_qiang3 天前
上传本地镜像到harbor中
docker·容器·持续部署
羑悻的小杀马特3 天前
Dockerfile 全景指南:从入门编写dockerfile到生产环境镜像优化实战,一步步带你从啃透制作指令到镜像制作落地!
docker·dockerfile·镜像制作
BianHuanShiZhe3 天前
docker常见命令
docker
正经教主3 天前
【FDE系列】阶段2:Day 43:Docker Compose — 多容器一键编排
人工智能·docker·fde
忆~遂愿3 天前
本地片库怎么在外面打开?Plex + cpolar 搭一套可远程访问的私人影音库
docker·容器