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

GitHub Action中用Docker运行自定义Action时如何修改构建上下文

答案

核心结论

你无法完全保留原有action.yml的Docker运行配置仅修改构建上下文实现需求——GitHub官方的Docker类型Action默认强制将action.yml所在目录作为Docker构建上下文,没有内置配置项可以修改该默认行为。不过你可以仅修改action.yml的runs段内容,输入定义等其他配置完全可以保留,同时满足自定义构建上下文、镜像缓存的需求。

可行实现方案

推荐将你的Action从Docker类型改为复合类型(Composite Action),手动控制Docker构建流程:

1. 调整action.yml配置

把./.github/actions/myaction/action.yml的runs段修改为如下结构即可:

name: 'myaction'
description: 'myaction'
inputs:
  some_input:
    description: 'some_input'
    required: true
runs:
  using: 'composite'
  steps:
    # 构建Docker镜像,指定根目录为上下文,同时启用GitHub构建缓存
    - name: Build action Docker image
      uses: docker/build-push-action@v5
      with:
        context: ${{ github.workspace }}
        file: ${{ github.action_path }}/Dockerfile
        tags: myaction:latest
        load: true
        cache-from: type=gha
        cache-to: type=gha,mode=max
    # 运行构建好的容器,传入输入参数
    - name: Run myaction
      shell: bash
      run: |
        docker run --rm \
          -v ${{ github.workspace }}:${{ github.workspace }} \
          -w ${{ github.workspace }} \
          myaction:latest ${{ inputs.some_input }}

2. 配置说明

  • 构建上下文通过context: ${{ github.workspace }}指定为项目根目录,你原本Dockerfile里的COPY路径不需要做任何修改
  • 缓存通过Docker官方构建Action的type=gha实现,GitHub会自动缓存镜像层,无需额外配置缓存规则,后续运行只有Dockerfile改动时才会重新构建
  • 容器运行时挂载了工作目录,保证容器内可以访问工作流前置步骤生成的所有文件

注意事项

  • 调用该Action的工作流需要先执行actions/checkout拉取仓库代码,保证构建上下文包含需要的文件
  • 如果你有其他需要传递给容器的环境变量,可以在docker run命令中通过-e 变量名参数传入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:54:01