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

GitHub Actions中Docker挂载卷报错:绑定源路径不存在的解决方法

问题

配置GitHub Actions工作流时,尝试在Docker容器内运行测试并挂载仓库中的coverage目录,执行时触发错误:

Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /home/runner/work/WebUi/WebUi/QualityControl/coverage

场景说明

  • 项目存储于GitHub仓库
  • 在GitHub Actions工作流中尝试创建QualityControl/coverage目录
  • 通过Docker Compose挂载该目录到容器,用于生成测试覆盖率报告

相关配置

GitHub Actions工作流配置

jobs:
  coverage:
    runs-on: ubuntu-latest
    steps:
      - name: Create Coverage Directory
        run: mkdir -p QualityControl/coverage && ls -ld QualityControl/coverage
      - uses: actions/checkout@v4
      - run: (cd QualityControl; npm ci)
      - run: (cd QualityControl; npm run docker-coverage)

Docker Compose配置

services:
  test_app:
    build:
      target: coverage
    command: ["/opt/wait-for-it.sh", "-t", "0", "test_db:3306", "--", "npm", "run", "coverage-lcov"]
    volumes:
      - type: bind
        source: ./coverage
        target: /usr/src/app/coverage
        read_only: false

已尝试操作

  • 使用mkdir -p和ls命令确认coverage目录已创建
  • 在docker-compose.yml中交替尝试绝对路径与相对路径
  • 确保docker-compose命令在QualityControl目录内执行

解决方案

核心原因

你将创建coverage目录的步骤放在了actions/checkout@v4之前,而checkout步骤会把仓库代码完整拉取到工作目录,直接覆盖掉之前创建的QualityControl/coverage目录(甚至可能替换整个QualityControl文件夹),导致后续Docker挂载时找不到指定路径。

修复步骤

  1. 调整步骤顺序
    将Create Coverage Directory步骤移到actions/checkout@v4之后,确保目录创建在拉取完成的仓库工作目录中:
jobs:
  coverage:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Create Coverage Directory
        run: mkdir -p QualityControl/coverage && ls -ld QualityControl/coverage
      - run: (cd QualityControl; npm ci)
      - run: (cd QualityControl; npm run docker-coverage)
  1. 确认挂载路径有效性
    Docker Compose中使用的./coverage相对路径是基于执行docker-compose命令的目录(即QualityControl),调整步骤顺序后,该路径会指向正确创建的QualityControl/coverage目录,Docker就能识别到挂载源。

  2. 备选方案:容器内自动创建目录
    如果不想手动在宿主机创建目录,可以修改Docker Compose,让容器启动时自动生成目标目录(注意权限适配):

services:
  test_app:
    build:
      target: coverage
    command: ["/opt/wait-for-it.sh", "-t", "0", "test_db:3306", "--", "npm", "run", "coverage-lcov"]
    volumes:
      - type: bind
        source: ./coverage
        target: /usr/src/app/coverage
        read_only: false
    entrypoint: ["sh", "-c", "mkdir -p /usr/src/app/coverage && exec $0 $@"]

内容的提问来源于stack exchange,提问作者Alejandro Mariscal Romero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:03:25