本页面描述了 act 如何与 Docker 集成以在容器化环境中运行 GitHub Actions 工作流。Docker 作为 act 的主要执行环境,提供隔离的容器来运行操作和工作流步骤。
有关在非 Docker 环境中运行 act 的信息,请参阅主机环境。
Act 依赖 Docker 创建与 GitHub 运行器高度相似的隔离环境。Docker 集成处理容器生命周期管理、镜像操作、文件传输以及容器内的命令执行。
来源:pkg/container/docker_run.go215-238 pkg/container/docker_pull.go19-75 pkg/container/docker_build.go22-72 pkg/container/docker_volume.go13-54 pkg/container/docker_network.go12-79
Act 通过 Docker Engine API 与 Docker 通信。与 Docker 守护进程的连接通过环境变量(如DOCKER_HOST)建立,并支持本地和远程连接,包括 SSH。
关键组件
GetDockerClient():使用环境变量 (DOCKER_HOST) 创建 Docker 客户端来源:pkg/container/docker_run.go215-238
Act 管理 Docker 容器从创建到删除的整个生命周期。每个容器代表一个作业运行器或一个操作执行环境。
关键容器操作
来源:pkg/container/docker_run.go67-77 pkg/container/docker_run.go79-100 pkg/container/docker_run.go154-161 pkg/container/docker_run.go163-170
containerReference 结构体是 Docker 容器接口的核心实现。它管理与 Docker 的连接并提供容器操作的方法。
容器引用实现了几个关键方法
connect():建立与 Docker 守护进程的连接find():按名称查找现有容器create():创建新容器start():启动容器exec():在容器内运行命令copy() 和 copyDir():将文件复制到/从容器remove():移除容器来源:pkg/container/docker_run.go206-213 pkg/container/docker_run.go67-170
Act 执行多项 Docker 镜像操作,包括从注册表拉取镜像和从 Dockerfile 构建镜像。
镜像拉取过程会在从注册表拉取之前检查本地是否存在镜像。它支持私有注册表的身份验证。
来源:pkg/container/docker_pull.go19-75 pkg/container/docker_images.go13-34
Act 可以从 Dockerfile 和上下文目录构建 Docker 镜像
来源:pkg/container/docker_build.go22-72 pkg/container/docker_build.go73-118
Act 提供在主机和容器之间传输文件的机制。这对于需要访问工作流文件的操作至关重要。
关键文件操作特性
.gitignore 过滤复制目录来源:pkg/container/docker_run.go116-136 pkg/container/docker_run.go701-832
Act 通过 NewContainerInput 结构体提供广泛的容器配置选项。
| 参数 | 描述 |
|---|---|
| 图片 | 要使用的 Docker 镜像 |
| 入口点 | 容器入口点 |
| 命令 | 要运行的命令 |
| 环境变量 | 环境变量 |
| 工作目录 | 容器内的工作目录 |
| 挂载点 | 卷挂载 |
| 绑定挂载 | 绑定挂载 |
| 网络模式 | 网络模式(桥接、主机等) |
| 特权模式 | 是否以特权模式运行 |
| 暴露端口 | 要暴露的端口 |
| 端口绑定 | 端口绑定 |
| 网络别名 | 网络别名 |
| 选项 | 其他 Docker 选项 |
配置可以直接提供,也可以通过带有 Options 字段的 Docker 命令行样式选项提供。
来源:pkg/container/docker_run.go352-474
Act 在容器内执行命令以运行工作流步骤和操作。执行过程
执行支持
来源:pkg/container/docker_run.go542-612
Act 可以创建和管理 Docker 网络,以实现容器间通信。
网络提供
来源:pkg/container/docker_network.go12-79
Act 管理 Docker 卷以在工作流运行之间持久化数据。
来源:pkg/container/docker_volume.go13-54
Act 支持 Docker 注册表身份验证以拉取私有镜像。
主要身份验证功能
来源:pkg/container/docker_auth.go15-61 pkg/container/docker_pull.go77-116
Act 支持在不同平台和架构上运行容器
linux/amd64, linux/arm64)来源:pkg/container/docker_run.go446-457 pkg/container/docker_run.go259-276
Docker 集成通过管理工作流执行的 RunContext 连接到更广泛的 Act 系统。
RunContext 包含容器引用并使用它来