EC2上自托管GitHub Action Runner任务失败求助
排除资源耗尽的情况后,这个error waiting for container: unexpected EOF错误还有以下几种常见触发原因:
Docker守护进程异常或资源泄漏
即使实例整体CPU/内存未达上限,Docker daemon长期运行可能出现内存泄漏、进程僵死等问题,导致与容器的通信管道中断,抛出EOF错误。可以通过docker info检查daemon状态,或者重启Docker服务(systemctl restart docker)测试是否恢复,同时查看Docker日志(journalctl -u docker.service)排查异常信息。存储资源耗尽
若EC2实例的根卷或Docker数据目录(默认/var/lib/docker)磁盘空间占满,Docker在写入镜像层、容器日志或临时文件时会失败,导致容器异常退出。执行df -h查看磁盘使用率,du -sh /var/lib/docker检查Docker占用的存储空间,清理无用的镜像、容器、卷(docker system prune -af)释放空间。Docker镜像或容器状态损坏
构建过程中拉取的基础镜像损坏,或者残留的异常容器/卷干扰了新容器的启动。可以尝试清理本地所有未使用的Docker资源,重新拉取镜像后再执行构建。权限配置冲突
用户数据脚本中使用ubuntu用户配置Runner,但该用户可能未加入docker用户组,导致Runner进程操作Docker容器时出现权限不足,间接引发通信中断。执行groups ubuntu检查用户组,若未包含docker,执行usermod -aG docker ubuntu并重启GitHub Actions Runner服务(sudo ./svc.sh restart)。内核与Docker版本兼容性问题
若近期EC2实例更新了系统内核,但Docker版本未同步适配,可能出现兼容性问题导致容器异常。检查当前Docker版本(docker --version)和内核版本(uname -r),尝试升级Docker到最新稳定版,或降级到与内核兼容的版本。网络连通性异常
构建过程中容器需要拉取镜像、依赖包,若EC2实例的安全组/网络ACL限制了出站流量,或VPC网络出现波动,会导致容器内部网络请求失败,容器被强制终止。可以在构建步骤中添加网络测试命令(如curl https://registry.hub.docker.com)验证连通性,检查网络规则是否有变更。容器日志驱动配置问题
如果Docker使用的日志驱动(如默认的json-file)配置不当(比如日志文件大小限制过小),会导致日志写入失败,容器被强制停止。检查/etc/docker/daemon.json中的日志配置,可临时切换为journald驱动测试是否解决问题。Runner工作目录权限异常
GitHub Actions Runner的工作目录(actions-runner/_work)若权限不属于ubuntu用户,会导致构建过程中文件读写失败,间接引发容器异常。执行ls -ld actions-runner/_work检查权限,若异常则修复为ubuntu:ubuntu所有(chown -R ubuntu:ubuntu actions-runner/_work)。
内容的提问来源于stack exchange,提问作者Reidacus

