GitLab CI Docker执行器创建容器失败,求解决方案
解决GitLab Runner Docker执行器容器启动失败(broken pipe)的思路
你遇到的这个错误是典型的GitLab Runner与Docker运行时交互的兼容性问题,结合你的配置和错误日志,我提供几个具体的排查和解决方向:
1. 优先升级GitLab Runner版本
你当前使用的gitlab-ci-multi-runner 9.5.1是非常老旧的版本(发布于2018年),它和新版本的Docker Daemon存在很多已知的兼容性问题,尤其是OCI运行时通信相关的bug。建议直接升级到最新的稳定版Runner(比如16.x系列),新版修复了大量容器创建、挂载相关的问题,大概率能解决这个broken pipe的报错。
升级步骤参考:
- 停止当前Runner服务:
sudo gitlab-runner stop - 下载对应系统的新版本Runner替换现有二进制文件
- 重启服务:
sudo gitlab-runner restart - 重新注册Runner(如果需要)
2. 检查Docker Daemon版本兼容性
确保你的Docker Daemon版本和GitLab Runner版本匹配。老版本Docker(比如18.09之前)可能不支持Runner新版本的某些容器启动参数,反之老旧Runner也无法适配新版Docker的OCI运行时规范。
- 查看当前Docker版本:
docker --version - 参考GitLab官方的版本兼容性矩阵,调整Docker或Runner版本到兼容组合
3. 调整Runner的Docker配置
打开Runner的config.toml配置文件(通常在/etc/gitlab-runner/目录下),尝试以下调整:
- 添加
privileged = true到[runners.docker]段(注意:此配置会赋予容器更高权限,仅在测试时使用,生产环境需谨慎) - 检查
volumes配置,确保/builds目录挂载正确,比如设置为:volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/builds:/builds", "/cache"] - 尝试添加
disable_cache = true临时禁用缓存,排查是否是缓存目录挂载导致的问题
4. 验证基础镜像的可用性
先在本地测试镜像是否能正常启动,排除镜像本身的问题:
docker pull jakzal/phpqa:php7.3-alpine docker run --rm -it jakzal/phpqa:php7.3-alpine sh
如果本地启动也失败,说明镜像可能损坏或与你的服务器架构不兼容(比如x86镜像在ARM服务器上运行):
- 尝试重新拉取镜像:
docker rmi jakzal/phpqa:php7.3-alpine && docker pull jakzal/phpqa:php7.3-alpine - 替换为更基础的镜像,比如
php:7.3-alpine,然后在gitlab-ci.yml中手动安装composer:composer-validate: image: php:7.3-alpine stage: composer_validate before_script: - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" - php composer-setup.php --install-dir=/usr/local/bin --filename=composer script: - composer validate
5. 检查Runner执行环境的基础问题
- 检查服务器磁盘空间:
df -h,确保/builds所在分区有足够空间 - 检查
/builds目录权限:ls -ld /builds,确保Runner用户(通常是gitlab-runner)拥有读写权限 - 重启Docker Daemon:
sudo systemctl restart docker,有时候Docker服务异常会导致容器创建失败
内容的提问来源于stack exchange,提问作者famas23
相关产品推荐
相关产品推荐

