Sonarqube 无法创建用户缓存

Posted

技术标签:

【中文标题】Sonarqube 无法创建用户缓存【英文标题】:Sonarqube failed to create user cache 【发布时间】:2020-06-01 17:26:11 【问题描述】:

我正在使用 Docker 创建 Sonarqube 环境,但是当我运行扫描仪时,发生了错误。

我将扫描仪直接运行到容器中:

PS C:\docker\sonarqube\projects\test> docker exec -it sonarqube /bin/bash
sonarqube@05399e4fa8a6:/home/projects/test$ sonar-scanner

信息:扫描仪配置文件:/usr/lib/sonar-scanner/conf/sonar-scanner.properties INFO:项目根配置文件:/home/projects/test/sonar-project.properties 信息:SonarQube 扫描仪 4.2.0.1873 信息:Java 11.0.3 AdoptOpenJDK(64 位) 信息:Linux 4.9.184-linuxkit amd64 信息:------------------------------------------------ ------------ 信息:执行失败 信息:------------------------------------------------ ------------ 信息:总时间:0.364s 信息:最终内存:2M/10M 信息:------------------------------------------------ ------------ 错误:SonarQube 扫描仪执行期间出错 java.lang.IllegalStateException:无法创建用户缓存:/home/.sonar/cache 在 org.sonarsource.scanner.api.internal.cache.FileCache.createDir(FileCache.java:147) 在 org.sonarsource.scanner.api.internal.cache.FileCache.(FileCache.java:46) 在 org.sonarsource.scanner.api.internal.cache.FileCache.create(FileCache.java:52) 在 org.sonarsource.scanner.api.internal.cache.FileCacheBuilder.build(FileCacheBuilder.java:48) 在 org.sonarsource.scanner.api.internal.JarDownloaderFactory.create(JarDownloaderFactory.java:42) 在 org.sonarsource.scanner.api.internal.IsolatedLauncherFactory.createLauncher(IsolatedLauncherFactory.java:68) 在 org.sonarsource.scanner.api.EmbeddedScanner.doStart(EmbeddedScanner.java:185) 在 org.sonarsource.scanner.api.EmbeddedScanner.start(EmbeddedScanner.java:123) 在 org.sonarsource.scanner.cli.Main.execute(Main.java:73) 在 org.sonarsource.scanner.cli.Main.main(Main.java:61) 引起:java.nio.file.AccessDeniedException: /home/.sonar/cache 在 java.base/sun.nio.fs.UnixException.translateToIOException(未知来源) 在 java.base/sun.nio.fs.UnixException.rethrowAsIOException(未知来源) 在 java.base/sun.nio.fs.UnixException.rethrowAsIOException(未知来源) 在 java.base/sun.nio.fs.UnixFileSystemProvider.createDirectory(未知来源) 在 java.base/java.nio.file.Files.createDirectory(未知来源) 在 java.base/java.nio.file.Files.createAndCheckIsDirectory(未知来源) 在 java.base/java.nio.file.Files.createDirectories(未知来源) 在 org.sonarsource.scanner.api.internal.cache.FileCache.createDir(FileCache.java:145) ... 9 更多

这是我在 docker-compose 中使用的 dockerfile:

FROM sonarqube:latest  

# Switch to root user to be able to install packages.  
USER root  

# Install packages.  
RUN apt-get update  
RUN apt-get install -y vim wget  

# Install sonarqube scanner.  
WORKDIR /usr/src  

RUN wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873-linux.zip  

RUN unzip sonar-scanner-cli-4.2.0.1873-linux.zip  
RUN rm sonar-scanner-cli-4.2.0.1873-linux.zip  
RUN mv sonar-scanner-4.2.0.1873-linux /usr/lib/sonar-scanner  

# Create symbolic link.  
RUN ln -s /usr/lib/sonar-scanner/bin/sonar-scanner /usr/local/bin/sonar-scanner  
ENV SONAR_RUNNER_HOME=/usr/lib/sonar-scanner  

ENV SONAR_USER_HOME=/home/.sonar  

# Switch back to the sonarqube environment.  
WORKDIR $SONARQUBE_HOME  
USER sonarqube  

码头工人撰写:

version: '3.7'

services:
    sonarqube:
        build: .
        container_name: sonarqube
        ports:
            - 9000:9000
        networks:
            - sonarnet
        environment:
            - sonar.jdbc.url=jdbc:postgresql://db:5432/sonar
        volumes:
            - ./projects:/home/projects
            - sonarqube_conf:/opt/sonarqube/conf
            - sonarqube_data:/opt/sonarqube/data
            - sonarqube_logs:/opt/sonarqube/logs
            - sonarqube_extensions:/opt/sonarqube/extensions

    db:
        image: postgres:latest
        container_name: sonarqube_database
        networks:
            - sonarnet
        environment:
            - POSTGRES_USER=sonar
            - POSTGRES_PASSWORD=sonar
        volumes:
            - postgresql:/var/lib/postgresql
            - postgresql_data:/var/lib/postgresql/data

networks:
    sonarnet:
        driver: bridge

volumes:
    projects:
    sonarqube_conf:
    sonarqube_data:
    sonarqube_logs:
    sonarqube_extensions:
    postgresql:
    postgresql_data:

我知道这是访问问题,但我不明白为什么。 任何想法为什么会发生这种情况?

【问题讨论】:

我看到你导出的值是:SONAR_USER_HOME。使用 bashrc 保留有帮助吗? RUN echo "export SONAR_USER_HOME=/home/.sonar" >> ~/.bashrc RUN . ~/.bashrc 【参考方案1】:

解决了我的问题。在 dockerfile 中:

RUN mkdir /home/.sonar
RUN chmod 777 /home/.sonar
ENV SONAR_USER_HOME=/home/.sonar

【讨论】:

对于当前/sonarqube 用户的所有 rwx 权限 & 对于组,其他人只需读取权限可能就足够了 RUN chmod -R 744 /home/.sonar

以上是关于Sonarqube 无法创建用户缓存的主要内容,如果未能解决你的问题,请参考以下文章

SonarQube无法插入MySql数据库

SonarQube - 无法创建工作路径:

Jenkins集成SonarQube

Sonarqube 与现有 Oracle 12c 的集成

Jenkins - Maven 项目 - SonarQube 分析不稳定 - 错误:无法为 - java.lang.IllegalArgumentException 创建符号表:null

无法在Windows上将SonarQube 5.3作为服务运行