You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins流水线执行docker load遇permission denied问题求助

解决Jenkins流水线中docker load的权限拒绝问题

问题分析

错误提示open /home/test/build_artifacts/test.tar: permission denied并非Docker命令执行权限不足(终端能正常运行已验证),核心问题是Jenkins运行进程的用户没有该tar文件及父目录的读取权限。之前将jenkins用户添加到docker组的操作,解决的是Docker命令的执行权限,和当前文件访问权限问题无关。

解决方案

1. 检查文件与目录权限

先确认目标文件和其父目录的权限及所属用户/组:

# 查看父目录权限
ls -ld /home/test/build_artifacts
# 查看tar文件权限
ls -l /home/test/build_artifacts/test.tar

输出中需确保Jenkins运行用户(默认是jenkins)对目录有读+执行权限,对文件有读权限。

2. 调整文件/目录权限

方式一:开放其他用户权限(快速验证)

直接给其他用户添加必要权限:

# 给父目录添加其他用户读+执行权限
sudo chmod o+rx /home/test/build_artifacts
# 给tar文件添加其他用户读权限
sudo chmod o+r /home/test/build_artifacts/test.tar

方式二:将Jenkins用户加入文件所属组(更安全)

  1. 从ls -l输出中获取tar文件的所属组(第三列内容)
  2. 将jenkins用户加入该组:
sudo usermod -a -G [文件所属组名] jenkins
  1. 重启Jenkins服务:
sudo systemctl restart jenkins

3. 检查流水线运行的实际用户

如果Jenkins使用了自定义构建代理(Agent),流水线可能是在代理节点的用户下运行,而非主节点的jenkins用户。此时需要:

  • 确认代理节点的运行用户
  • 给该用户添加目标文件的访问权限(参考上述步骤)

4. 临时方案:使用sudo(不推荐)

若上述方法无效,可尝试在流水线的sh命令前加sudo,但需先配置jenkins用户免密码执行该命令:

  1. 编辑sudoers文件:sudo visudo
  2. 添加一行:jenkins ALL=(ALL) NOPASSWD: /usr/bin/docker load -i /home/test/build_artifacts/*.tar
  3. 流水线中修改命令:sh "sudo docker load -i /home/test/build_artifacts/${repo_name}.tar"

内容的提问来源于stack exchange,提问作者RadiumBall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:51:12