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

如何让树莓派4上的自托管GitHub Runner在Docker容器中运行任务

配置GitHub自托管Runner在Docker容器中执行任务

GitHub自托管Runner确实不像GitLab那样默认启用容器执行,但你可以通过两种方式实现任务在Docker中运行,彻底隔离宿主系统:

方案1:整个Job在Docker容器中运行

这种方式让整个Job的所有步骤都在指定的Docker容器内执行,是最彻底的宿主环境隔离方案。

修改你的Workflow配置

在现有build Job中添加container字段,指定适配树莓派arm64架构的镜像,并按需挂载硬件设备或宿主目录:

name: CI Rasp

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]
  workflow_dispatch:

jobs:
  build:
    runs-on: self-hosted
    # 配置Job使用Docker容器
    container:
      # 选择支持arm64的Python镜像(适配树莓派4)
      image: python:3.9-slim-bullseye
      # 特权模式+挂载GPIO设备,确保脚本能访问树莓派硬件
      options: --privileged -v /dev/gpiomem:/dev/gpiomem -v /dev/mem:/dev/mem
      # 若需挂载宿主目录(比如你的blinky.py在宿主而非仓库),添加:-v /home/jbron:/workspace/scripts

    steps:
      - uses: actions/checkout@v3

      # 安装脚本依赖(比如GPIO控制库)
      - name: 安装Python依赖
        run: pip install RPi.GPIO

      - name: Run a one-line script
        run: echo Hello, world!

      # 若脚本在仓库中,直接运行;若在宿主挂载目录,用/workspace/scripts/blinky.py
      - name: Run blinky for 3 times
        run: python blinky.py

方案2:单步骤用Docker执行

如果只需要个别步骤在容器中运行,可直接在run步骤中调用docker run命令:

# 保留原Job结构,修改对应步骤
jobs:
  build:
    runs-on: self-hosted
    steps:
      - uses: actions/checkout@v3

      - name: Run a one-line script
        run: echo Hello, world!

      - name: Run blinky in Docker container
        run: |
          docker run --rm --privileged \
            -v $GITHUB_WORKSPACE:/workspace \
            -v /dev/gpiomem:/dev/gpiomem \
            python:3.9-slim-bullseye \
            sh -c "cd /workspace && pip install RPi.GPIO && python blinky.py"

前置准备:树莓派上配置Docker环境

无论用哪种方案,都需要先在你的树莓派自托管Runner上安装Docker,并赋予Runner用户Docker权限:

  1. 安装Docker:
sudo apt update && sudo apt install docker.io -y
  1. 将Runner运行用户加入docker组(避免每次执行Docker命令需sudo):
# 替换成你的Runner实际用户名,比如默认是github-runner
sudo usermod -aG docker github-runner
# 刷新组权限,或重启Runner服务
newgrp docker
sudo systemctl restart github-runner.service

关键说明

  • 镜像选择:必须使用支持arm64架构的镜像(树莓派4是arm64),避免用仅支持amd64的镜像导致运行失败。
  • 硬件访问:若脚本需要控制GPIO等硬件,必须添加--privileged参数并挂载对应设备文件(如/dev/gpiomem)。
  • 脚本位置:推荐将blinky.py放入代码仓库,这样通过actions/checkout就能同步到容器中,无需挂载宿主目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:36:23