GitHub自托管Action Runner搭配containerd时/var/run/docker.sock不存在的问题解决求助
我现在在运行一个GitHub自托管Action Runner,这个Runner需要用到Docker CLI,但我的主机用的是containerd作为运行时。Docker已经安装了,可是找不到活跃的/var/run/docker.sock,怎么才能让GitHub Action Runner正常工作呢?
以下是我执行相关命令的输出:
pi@kube-master:~ $ sudo find / -name "docker.sock" pi@kube-master:~ $ sudo find / -name "containerd.sock" /run/containerd/containerd.sock pi@kube-master:~ $ docker info Client: Docker Engine - Community Version: 25.0.3 Context: default Debug Mode: false Plugins: buildx: Docker Buildx (Docker Inc.) Version: v0.12.1 Path: /usr/libexec/docker/cli-plugins/docker-buildx compose: Docker Compose (Docker Inc.) Version: v2.24.5 Path: /usr/libexec/docker/cli-plugins/docker-compose Server: ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? errors pretty printing info
可行的解决方法:
让Docker CLI直接连接containerd
既然主机默认用containerd,我们可以给Docker CLI创建一个指向containerd套接字的context,这样不需要启动Docker daemon也能正常使用Docker命令:# 创建containerd上下文 docker context create containerd --docker "host=unix:///run/containerd/containerd.sock" # 切换到这个上下文 docker context use containerd执行完后再跑
docker info应该就能看到连接到containerd的信息了,GitHub Action Runner会自动使用当前的Docker上下文,这样就能满足依赖。启动Docker daemon并配置使用containerd作为运行时
如果你更习惯保留Docker daemon的方式,可以修改Docker的配置文件来让它用containerd做运行时:- 编辑(或创建)
/etc/docker/daemon.json,添加以下内容:
{ "runtimes": { "containerd": { "path": "containerd", "runtimeArgs": [] } }, "default-runtime": "containerd" }- 重启Docker服务:
sudo systemctl restart docker重启后
/var/run/docker.sock就会正常生成,Docker daemon会通过containerd管理容器,这样GitHub Action Runner就能像往常一样连接使用了。- 编辑(或创建)
针对GitHub Action Runner直接配置containerd(按需选择)
部分特定的GitHub Actions支持直接使用containerd,你可以在Runner的配置里指定/run/containerd/containerd.sock的路径,但这种方法兼容性不如前两种,因为大部分Action还是基于Docker CLI开发的,优先推荐前两种方案。
备注:内容来源于stack exchange,提问作者Justin

