Gitlab CI Runner挂载卷无法存储大数据集问题求助
解决方案
1. 修正CI脚本的文件操作逻辑
你的Runner已将服务器的/full_path/dist/pedestrian目录挂载到容器内的/home/ci-artifacts,容器内对/home/ci-artifacts的读写会直接同步到服务器对应目录。当前脚本的复制路径逻辑错误,应将数据集直接写入容器内的挂载点,而非从服务器路径复制。
修改.gitlab-ci.yml的script段:
build: stage: build tags: - runner script: - pwd - poetry build -v # 直接在容器挂载点创建目录,无需在本地dist下创建后复制 - mkdir -p /home/ci-artifacts/ # 替换为你的数据集下载/生成命令,示例: - wget -O /home/ci-artifacts/dataset.tar.gz https://your-dataset-url - tar -xzf /home/ci-artifacts/dataset.tar.gz -C /home/ci-artifacts/ # 如果数据集确实在当前工作目录的dist/pedestrian下,用相对路径复制: # - cp -r ./dist/pedestrian/* /home/ci-artifacts/
2. 确保服务器目录的权限与存在性
登录GitLab Runner所在服务器,执行以下命令:
- 创建目标目录(如果未存在):
sudo mkdir -p /full_path/dist/pedestrian - 赋予GitLab Runner用户读写权限:
sudo chown -R gitlab-runner:gitlab-runner /full_path/dist/pedestrian - 设置合理权限:
sudo chmod -R 755 /full_path/dist/pedestrian
3. 验证Runner配置并重启服务
确认Runner配置文件中的卷路径无拼写错误,格式为服务器绝对路径:容器内路径:
[[runners]] ..... [runners.docker] tls_verify = false image = "pytorch/pytorch:2.0.1-cuda11.7-cudnn8-devel" runtime = "nvidia" privileged = false disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/usr/bin/nvidia-smi:/usr/bin/nvidia-smi", "/cache", "/full_path/dist/pedestrian:/home/ci-artifacts"] shm_size = 300000 network_mtu = 0
修改配置后重启Runner服务生效:sudo gitlab-runner restart
4. 添加调试命令验证挂载有效性
在CI脚本中加入调试步骤,确认挂载是否正常:
script: # 检查容器内挂载点状态 - ls -ld /home/ci-artifacts # 测试写入权限 - touch /home/ci-artifacts/test_mount.txt && echo "挂载写入测试成功" # 查看挂载信息 - mount | grep /home/ci-artifacts
运行流水线后,去服务器的/full_path/dist/pedestrian目录查看是否存在test_mount.txt,以此验证挂载是否正常工作。
内容的提问来源于stack exchange,提问作者1dll
相关产品推荐
相关产品推荐

