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

Gitea Action中Docker Compose卷挂载失败问题求助

解决Gitea Act Runner中Docker Compose挂载SQL文件失败的问题

问题场景

在自托管Gitea服务器上使用官方Docker Compose配置的Act Runner执行类GitHub Action工作流时,遇到PostgreSQL服务挂载本地SQL文件失败的问题:

  • 本地机器和nektos act中Docker Compose文件可正常运行
  • Runner已挂载Docker套接字
  • 工作流执行时,PostgreSQL容器报错:
    test-db  | /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/11schema.sql
    test-db  | psql:/docker-entrypoint-initdb.d/11schema.sql: error: could not read from input file: Is a directory
    test-db exited with code 1
    
  • 相关配置片段:
    工作流:
    jobs:
      test_job:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout
            uses: actions/checkout@v4
          - name: Setup
            run: docker compose --profile setup up --wait
          - name: Test
            run: docker compose run --rm test
          - name: Cleanup
            if: always()
            run: docker compose --profile setup down
    
    Docker Compose数据库服务:
    services:
      db:
        image: postgres:17
        volumes:
          - ./test/db/schema.sql:/docker-entrypoint-initdb.d/11schema.sql
    

解决方案

1. 验证文件存在性与工作目录

在Setup步骤前添加验证,确认代码已完整拉取且文件存在:

- name: Verify schema file
  run: |
    pwd
    ls -la ./test/db/

确保actions/checkout@v4没有遗漏文件,且docker compose命令在仓库根目录执行。

2. 使用绝对路径挂载

避免相对路径的上下文歧义,改用当前工作目录的绝对路径:
修改Docker Compose中的卷配置:

volumes:
  - ${PWD}/test/db/schema.sql:/docker-entrypoint-initdb.d/11schema.sql

或者执行docker compose时明确指定项目目录:

- name: Setup
  run: docker compose --profile setup --project-directory ${PWD} up --wait

3. 修复文件权限

Act Runner容器内的用户可能无读取权限,添加权限修复步骤:

- name: Fix file permissions
  run: chmod +r ./test/db/schema.sql

也可以在Runner的Docker Compose配置中,以宿主机用户身份运行容器,避免权限不匹配:

services:
  runner:
    image: gitea/act_runner:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/data
    user: "${UID}:${GID}"

4. 明确Docker挂载上下文

由于Runner挂载了宿主机Docker套接字,docker compose实际在宿主机上下文执行,需确保:

  • Runner容器的工作目录与宿主机的仓库目录一致
  • 若使用挂载的仓库目录,在Runner的Docker Compose中指定固定路径:
    services:
      runner:
        image: gitea/act_runner:latest
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          - ./data:/data
          - /your/host/repo/path:/repo
        working_dir: /repo
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:40:15