GitLab CI中自定义镜像Docker-in-Docker Registry认证失败排查
GitLab CI自定义Docker镜像docker login报错解决
问题场景
在GitLab CI流水线的docker-in-docker模式下:
- 使用官方
docker:24.0.5镜像时,从Registry拉取镜像的配置可正常运行 - 切换为内置Docker的自定义镜像
my_custom_image后,已手动设置DOCKER_HOST和DOCKER_TLS_CERTDIR变量,但执行docker login时触发错误:
Error response from daemon: Client sent an HTTP request to an HTTPS server
原因分析
官方docker镜像会自动配置TLS相关环境变量,确保Docker客户端以HTTPS方式连接daemon;你的自定义镜像缺少这些TLS强制验证的配置,导致客户端默认用HTTP请求HTTPS的daemon,从而报错。
需要补充的环境变量
在CI流水线的变量配置中添加以下内容:
DOCKER_TLS_VERIFY=1:强制Docker客户端启用TLS验证,使用HTTPS连接daemon- 可选补充(若自定义镜像未自动关联证书路径):
DOCKER_CERT_PATH=${DOCKER_TLS_CERTDIR}/client,明确指定客户端证书的存放路径(官方镜像默认会自动设置该关联)
同时需确保DOCKER_TLS_CERTDIR指向的目录下存在client子目录,且该目录包含ca.pem、cert.pem、key.pem三个TLS证书文件。
验证步骤
在CI任务中添加上述变量后,先执行docker info测试Docker客户端与daemon的连接状态,确认正常后再执行docker login操作。
内容的提问来源于stack exchange,提问作者christbl
相关产品推荐
相关产品推荐

