JMeter-Taurus Docker镜像在Drone流水线运行报错求助
问题解决:Drone流水线中JMeter-Taurus的权限错误修复
问题根源梳理
- 初始Dockerfile使用
USER 1000后,Taurus尝试在根目录创建.bzt-rc配置文件失败,抛出"No personal config found"错误——因为普通用户1000对根目录无写入权限。 - 移除
USER 1000以root运行后,出现PermissionError: [Errno 13] Permission denied: '/bzt/bzt.log',是因为/bzt目录被设置为归属1000:1000用户组,且Drone挂载卷的权限限制导致root无法写入该目录。
解决方案
方案1:保留USER 1000,修正配置文件路径与目录权限
将配置文件复制到用户1000的家目录,并确保Taurus需要写入的目录有足够权限:
FROM blazemeter/taurus RUN apt-get update && \ python3 -m pip install s3cmd # 创建并设置用户1000的家目录权限 RUN mkdir -p /home/taurus && \ chown -R 1000:1000 /home/taurus COPY . /bzt/ COPY config/90-artifacts-dir.json /etc/bzt.d/ COPY config/90-no-console.json /etc/bzt.d/ COPY .bzt-rc /home/taurus/.bzt-rc # 复制到用户1000的家目录,而非root目录 # 确保/bzt及产物目录权限正确 RUN mkdir -p /bzt/bzt_artifacts && \ chown -R 1000:1000 /bzt && \ sed -i -e '/^assistive_technologies=/s/^/#/' /etc/java-*-openjdk/accessibility.properties USER 1000 VOLUME ["/bzt"] WORKDIR /bzt
同时在Taurus测试配置文件(如bzt-config.yml)中明确日志和产物路径:
settings: log-file: /bzt/bzt.log artifacts-dir: /bzt/bzt_artifacts
方案2:以root运行,开放目录权限
如果必须以root身份运行,调整/bzt目录权限确保root可写入:
FROM blazemeter/taurus RUN apt-get update && \ python3 -m pip install s3cmd COPY . /bzt/ COPY config/90-artifacts-dir.json /etc/bzt.d/ COPY config/90-no-console.json /etc/bzt.d/ COPY .bzt-rc /root/.bzt-rc # 设置/bzt目录归属root并开放读写权限 RUN mkdir -p /bzt/bzt_artifacts && \ chown -R root:root /bzt && \ chmod -R 775 /bzt && \ sed -i -e '/^assistive_technologies=/s/^/#/' /etc/java-*-openjdk/accessibility.properties # 默认以root运行,无需USER指令 VOLUME ["/bzt"] WORKDIR /bzt
额外注意事项
- Drone流水线挂载卷时,需确保宿主目录权限允许容器内用户(1000或root)写入,必要时调整Drone挂载选项。
- 检查
90-artifacts-dir.json中的配置,确保产物目录路径与Dockerfile中创建的路径一致。
内容的提问来源于stack exchange,提问作者Sachin Patel
相关产品推荐
相关产品推荐

