Bitbucket自托管runner运行流水线后挂载卷内找不到生成文件如何解决
问题定位与解决步骤
1. 确认文件生成路径匹配挂载目录
- 首先在流水线创建文件的步骤后添加诊断命令,打印当前工作路径和挂载目录的文件列表:
pwd && ls -la /opt/runner && find / -name "你的目标文件名" 2>/dev/null
- 绝大多数此类问题都是因为使用相对路径创建文件:Bitbucket流水线容器默认工作目录不是
/opt/runner,如果创建文件时没有写绝对路径,文件会生成在当前工作目录,自然不会同步到挂载的宿主机路径。
2. 验证卷挂载规则实际生效
- 登录runner所在的Linux宿主机,执行测试命令验证挂载功能正常:
docker run --rm -v /home/ubuntu/runner:/opt/runner alpine touch /opt/runner/mount_test.txt && ls -l /home/ubuntu/runner/mount_test.txt - 如果执行后宿主机找不到
mount_test.txt,按以下顺序排查:- 检查宿主机目录权限:执行
ls -ld /home/ubuntu/runner,确认runner运行的用户对该目录有读写执行权限,可临时执行chmod 777 /home/ubuntu/runner做验证测试 - 检查挂载路径拼写:确认runner配置里的宿主机路径、容器路径没有拼写错误,比如漏写斜杠、大小写错误
- 检查宿主机目录权限:执行
3. 检查runner的Docker配置是否正确加载挂载规则
- Bitbucket自托管runner的自定义挂载需要写在
config.toml的[[runners.docker]]段的volumes配置项中,示例如下:
[[runners.docker]] volumes = ["/cache", "/home/ubuntu/runner:/opt/runner:rw"]
- 配置修改后必须重启runner服务才能生效,systemd管理的runner执行
systemctl restart bitbucket-runner即可。 - 可在流水线中执行
mount | grep /opt/runner验证挂载是否生效,无输出说明挂载规则没有被加载到当前任务的运行容器中。
4. 排除文件被自动清理的情况
- 部分流水线配置会在任务结束后自动清理容器内的文件,可在创建文件的步骤后添加
sleep 300命令,在休眠的5分钟内直接登录到运行流水线的容器中,确认/opt/runner路径下是否有目标文件,同时查看宿主机对应路径是否同步生成文件。
通用解决方案
- 创建文件时强制使用绝对路径,例如直接执行
touch /opt/runner/目标文件名,避免相对路径带来的路径漂移问题 - 权限问题修复:将宿主机挂载目录的所有者修改为runner运行的用户,例如runner使用
bitbucket用户运行的话,执行chown -R bitbucket:bitbucket /home/ubuntu/runner - 确认挂载规则添加了读写权限,不要漏写
:rw后缀
内容的提问来源于stack exchange,提问作者Bender
相关产品推荐
相关产品推荐

