如何启用非 docker 操作来访问我的自托管 github 操作运行器上 docker 创建的文件?(无根码头工人)

Fre*_*ens 6 containers github docker github-actions rootless

Github 建议以非 root 用户身份运行运行程序,这会引起一些有关混合 docker 和非 docker 操作的问题。这非常烦人,因为它导致签出操作无法运行,因为它无法访问在 docker 容器中运行的操作创建的文件。

可以通过使用 rootless docker 运行 actions runner 来解决这个问题吗?

Fre*_*ens 4

这个问题可以通过以 root 身份运行 github actions runner 来解决,但这在一定程度上降低了安全性。

更好的解决方案是使用 rootless docker:

  1. 如果您之前通过 Ubuntu 的默认存储库安装了 docker,请从系统中删除它。
  2. 按照此处的指示从 Docker 的存储库安装 docker(我还建议启用 cgroupsV2,如此处所述)并重新启动。这将为您提供下一步设置无根 docker 所需的 /usr/bin 中的脚本。
  3. 按照此处所述设置无根 docker
  4. 不要忘记运行以下命令,以便 docker 在您注销后仍保持运行(如指南中所述)
systemctl --user enable docker
systemctl --user start docker
sudo loginctl enable-linger $(whoami)
Run Code Online (Sandbox Code Playgroud)
  1. 还要确保按照同一页面上的描述创建无根上下文。这将使您自己的 docker 命令和 github actions runner 自动使用 rootless docker。

  2. 安装自托管运行器https://docs.github.com/en/actions/hosting-your-own-runners/adding-self-hosted-runners(如果已安装则跳过)

  3. 将环境变量添加DOCKER_HOST到运行程序目录中的 .env 文件中。该文件可能已默认创建。您添加的行应如下所示(如果您的 UID 不是 1000,请更改 1000):

DOCKER_HOST=unix:///run/user/1000/docker.sock
Run Code Online (Sandbox Code Playgroud)
  1. 重新(启动)动作运行器。这可以通过重新启动其 systemd 服务来完成。您的跑步者现在应该与无根码头工人一起工作

如果您在使用 buildx 的新 docker build github 操作时遇到问题,另请参阅如何解决 github 操作中无根 docker 自托管运行程序的错误: write /proc/sys/net/ipv4/ping_group_range: invalid argument:unknown