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 - 相关配置片段:
工作流:
Docker Compose数据库服务: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 downservices: 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
相关产品推荐
相关产品推荐

