GitLab Runner(K8s执行器)Docker连接失败及Kaniko权限问题求助
问题排查与解决方案
环境信息
- EKS集群版本:
v1.21.14-eks-6d3986b - GitLab CE镜像:
gitlab/gitlab-ce:14.1.8-ce.0 - GitLab Runner:Helm Chart 0.46.0(对应版本15.5.0)
问题1:Docker-in-Docker无法连接Docker daemon
报错信息
Cannot connect to the Docker daemon at tcp://docker:2375. Is the docker daemon running?
解决步骤
- 检查
.gitlab-ci.yaml的service配置,必须包含docker:dind服务,且镜像版本建议与runner使用的Docker客户端版本匹配,示例:services: - name: docker:20.10-dind command: ["--tls=false"] - 确认GitLab Runner已开启特权模式:
- Helm安装时添加参数:
--set runner.privileged=true - 或在runner的
config.toml中配置:privileged = true
- Helm安装时添加参数:
- 验证环境变量
DOCKER_HOST是否正确设置,默认应为tcp://docker:2375,若service别名修改,需同步调整该变量 - 查看runner pod的日志,检查
docker:dind容器是否正常启动,排查是否有端口占用、权限拒绝等启动失败日志
问题2:Kaniko推送镜像至Harbor权限不足
报错信息
UNAUTHORIZED: unauthorized to access repository: ops/abcli, action: push
解决步骤
- 确认Harbor用户权限:登录Harbor后台,检查该用户对
ops/abcli仓库是否拥有推送权限(至少为「开发者」角色) - 校验auth值生成正确性:
- 执行命令生成base64编码:
echo -n "harbor用户名:harbor密码" | base64,注意用户名使用Harbor登录账号,而非邮箱(除非Harbor配置邮箱登录) - 确保Kaniko使用的
config.json格式正确:{ "auths": { "你的Harbor地址": { "auth": "上述生成的base64字符串" } } }
- 执行命令生成base64编码:
- 检查CI变量传递:若用GitLab CI变量存储auth值,确保变量未被错误掩码,且在Kaniko任务中正确挂载
config.json到/kaniko/.docker目录 - 确认Harbor仓库存在:若
ops/abcli仓库未手动创建,需先在Harbor后台创建(Kaniko默认不会自动创建仓库,除非Harbor开启自动创建选项) - 校验Harbor地址与镜像标签:Kaniko构建命令中需指定完整镜像路径,例如
harbor.example.com/ops/abcli:v1.0,确保地址包含正确的协议(http/https)与端口 - 若Harbor启用HTTPS:需将Harbor的CA证书挂载到Kaniko容器的
/kaniko/ssl/certs目录,避免证书验证失败导致的权限校验异常
内容的提问来源于stack exchange,提问作者Jason Tom
相关产品推荐
相关产品推荐

