如何在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
相关产品推荐
相关产品推荐

