Rootless Podman 运行 Gitea Runner

本文属于「quadlet 配置分享」系列。Quadlet 入门见 Podman 教程,完整 Gitea 配置见 Quadlet 配置分享:Gitea

用 rootless Podman 跑 Gitea Actions Runner 时遇到的问题,记录一下。

Job 容器创建失败:making volume mountpoint

Runner 正常启动后,执行工作流时报错:

Error response from daemon: make cli opts(): making volume mountpoint for volume /var/run/docker.sock: mkdir /var/run/docker.sock: permission denied

原因是 act(nektos/act)创建 job 容器时,会把检测到的 Docker socket 路径作为 bind mount 的源路径。runner 容器里 socket 在 /var/run/docker.sock,act 就请求 Podman 把 host 上的 /var/run/docker.sock 绑进去——但 rootless Podman 的 socket 实际在 /run/user/1000/podman/podman.sock,host 上根本没有 /var/run/docker.sock,Podman 尝试 mkdir 就报错了。

解决方法:在 runner 的 config.yaml 里指定 docker_host,让 act 用真实的 host 路径:

先生成默认配置:

podman run -it --rm --entrypoint "" docker.io/gitea/act_runner:latest act_runner generate-config

修改配置:

container:
  docker_host: "unix:///run/user/1000/podman/podman.sock"

Quadlet 配置

# gitea-runner.container
[Unit]
Requires=gitea.service
After=gitea.service

[Container]
Image=docker.io/gitea/act_runner:latest
Pod=gitea.pod
Volume=/path/to/runner-data:/data
Volume=/run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock
Environment=GITEA_INSTANCE_URL=https://git.example.com GITEA_RUNNER_REGISTRATION_TOKEN=token CONFIG_FILE=/data/config.yaml
AutoUpdate=registry

[Service]
Restart=always
  1. /path/to/ 替换为实际路径。
  2. 1000 替换为你的用户 UID。
  3. config.yaml 其他字段保持默认即可。