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

如何在GitHub Action自定义Docker容器中访问仓库文件?

问题原因

当你使用using: docker类型的自定义GitHub Action时,Docker镜像的构建默认上下文是自定义动作所在的目录(即.github/actions/my-custom-action/),而非仓库的根目录。所以你在Dockerfile里用COPY/ADD只会复制动作目录下的文件,无法访问仓库根的内容。

解决方案

方案1:构建镜像时复制仓库文件(打包进镜像)

修改自定义动作的action.yml,显式指定构建上下文为仓库根目录:

name: Docker container test
description: Start container
runs:
  using: docker
  dockerfile: ./php.dockerfile
  context: ../../  # 从动作目录向上两级,指向仓库根

然后在php.dockerfile中就可以正常复制仓库根的文件:

FROM php:8.1-fpm-alpine

WORKDIR /var/www/html

# 复制仓库根目录下的所有文件到容器内工作目录
COPY . .

注意:此时Dockerfile中的路径都是相对于仓库根目录的,比如要复制特定目录src/,可以写COPY src/ /var/www/html/src/。

方案2:运行时挂载仓库目录(不打包进镜像)

如果不需要把仓库文件打包进镜像,只是在容器运行时访问,可以通过volumes参数将宿主的仓库目录挂载到容器内:
修改action.yml:

name: Docker container test
description: Start container
runs:
  using: docker
  image: ./php.dockerfile
  volumes:
    - ${{ github.workspace }}:/var/www/html  # 挂载仓库目录到容器内指定路径

这种方式下,容器启动后,/var/www/html目录会直接映射到GitHub Runner上的仓库路径,无需在Dockerfile中添加COPY指令,适合临时处理仓库文件的场景。

两种方案的选择
  • 若你的动作需要依赖镜像中包含的仓库代码(比如构建应用),选方案1;
  • 若只是需要在容器内执行脚本处理仓库文件(比如代码检查、测试),选方案2,更高效且无需重新构建镜像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:24:27