You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Docker插件报错:客户端向HTTPS服务器发送HTTP请求(400状态码)

解决Jenkins Docker DIND配置中的HTTP请求到HTTPS服务器报错

报错原因分析

com.github.dockerjava.api.exception.BadRequestException: Status 400: Client sent an HTTP request to an HTTPS server 本质是Jenkins的Docker插件尝试用HTTP协议连接启用了TLS的Docker DIND服务(2376端口默认走HTTPS),或者配置存在冲突导致协议不匹配。

解决方案步骤

1. 移除宿主机Docker Socket挂载(关键)

你添加的--volume /var/run/docker.sock:/var/run/docker.sock会导致Jenkins容器内同时存在两种Docker访问方式:

  • DIND的HTTPS服务(tcp://docker:2376)
  • 宿主机的HTTP Socket(/var/run/docker.sock)
    Docker插件可能优先使用Socket,但配置却指向2376端口,直接引发协议冲突。必须移除这个挂载卷,DIND模式不需要依赖宿主机Docker。

2. 验证DIND容器的TLS证书生成

进入DIND容器检查证书是否正常生成:

docker exec -it jenkins-docker ls /certs/client

需看到ca.pem、cert.pem、key.pem三个文件。如果缺失,清理现有资源后重新启动:

docker stop jenkins-docker jenkins-blueocean
docker rm jenkins-docker jenkins-blueocean
docker volume rm jenkins-docker-certs jenkins-data
docker network create jenkins

重新启动DIND容器,等待10秒让证书生成完成,再用你提供的原始命令启动Jenkins容器(去掉socket挂载)。

3. 修正Jenkins Docker Cloud配置

在Jenkins后台进入「Manage Jenkins」→「Manage Nodes and Clouds」→「Configure Clouds」→「Docker」:

  • 服务器URL:必须填写 tcp://docker:2376(不要加http://前缀)
  • 勾选「Enable Docker TLS」选项
  • 证书路径:填写 /certs/client(对应容器内挂载的证书卷路径)
  • 无需手动上传证书,卷已经挂载了DIND生成的证书文件

4. 验证Jenkins容器内环境变量

进入Jenkins容器确认环境变量配置正确:

docker exec -it jenkins-blueocean env | grep DOCKER

需输出:

DOCKER_HOST=tcp://docker:2376
DOCKER_CERT_PATH=/certs/client
DOCKER_TLS_VERIFY=1

完成以上步骤后,重新测试Docker Cloud的连接,即可解决HTTP/HTTPS协议不匹配的报错。

内容的提问来源于stack exchange,提问作者itmaybehimm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:40:53