GitLab Runner在Kubernetes集群执行docker login时卡住求助
解决GitLab Runner执行docker login卡住的问题
可能原因及对应解决方案
1. Runner权限配置冲突
你的values.yaml中,Runner自身的securityContext设置了allowPrivilegeEscalation: false,但runners.privileged: true——这会导致运行docker:dind的构建Pod无法获得足够权限,进而引发网络连接不稳定。
修复方法:
修改values.yaml的securityContext配置:
securityContext: allowPrivilegeEscalation: true # 改为true,允许构建Pod提升权限 readOnlyRootFilesystem: false runAsNonRoot: true privileged: false capabilities: drop: ["ALL"]
重新部署Runner:
helm upgrade gitlab-runner gitlab/gitlab-runner -f values.yaml
2. Docker DIND网络配置问题
你在.gitlab-ci.yaml里用localhost作为DOCKER_HOST地址,在K8s环境中,主容器与服务容器通过服务名互通更可靠,自定义的entrypoint和command也可能干扰DIND正常启动。
修复方法:
调整.gitlab-ci.yaml中的服务配置:
build docker image: stage: build image: docker:latest services: - name: docker:dind variables: DOCKER_HOST: tcp://docker:2375/ # 改用服务名docker替代localhost DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "" # 其余配置保持不变
3. Registry网络可达性与TLS问题
错误中的188.72.88.34是registry.labs.com的解析IP,可能存在两种情况:
- Runner所在K8s节点无法访问该IP的443端口(防火墙/安全组拦截)
- Registry的TLS证书不被信任,导致连接被强制关闭
验证与修复:
- 在Runner节点执行
curl -v https://registry.labs.com/v2/,检查是否能正常连接、是否有证书错误。 - 如果是证书问题,将Registry的CA证书注入构建Pod:
在.gitlab-ci.yaml的before_script中添加证书配置:
同时在GitLab项目before_script: - mkdir -p /etc/docker/certs.d/registry.labs.com - echo "$REGISTRY_CA_CERT" > /etc/docker/certs.d/registry.labs.com/ca.crt - mkdir -p $HOME/.docker - echo passwd| docker login -u user https://registry.labs.com --password-stdinSettings > CI/CD > Variables中添加REGISTRY_CA_CERT变量,值为Registry的CA证书内容。
4. Runner资源不足
你的concurrent: 10但未设置资源限制,可能导致Runner Pod资源耗尽,影响网络连接稳定性。
修复方法:
在values.yaml中添加资源限制(根据集群情况调整):
resources: requests: cpu: 100m memory: 128Mi limits: cpu: 500m memory: 512Mi
验证步骤
- 修改配置后重新部署Runner或触发CI流水线。
- 查看CI日志确认docker login是否正常。
- 若问题依旧,查看Runner Pod日志排查细节:
kubectl logs -n <runner-namespace> <runner-pod-name>
内容的提问来源于stack exchange,提问作者Breaking News
相关产品推荐
相关产品推荐

