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

Jenkins Docker容器经代理部署时插件下载失败,报SSL证书验证错误

Hey,我刚好碰到过一模一样的问题,给你几个快速解决的办法!

先搞懂为啥curl能用但Java不行

你用curl -k能拉到插件是因为-k直接跳过了SSL证书验证,但Jenkins拉取插件用的是Java内置的HTTP客户端,完全不依赖curl——所以你设置的CURL_OPTIONS对Jenkins的插件下载流程半毛钱用都没有。容器外curl成功只是因为你手动加了跳过验证的参数,但Java进程默认会严格校验证书链,而你的代理大概率是个拦截代理,用了自签名的CA证书,Java默认的信任库(cacerts)里没这个CA,所以才会抛出那个PKIX路径错误。

解决方案(按POC友好度排序)

方案1:改用HTTP插件源(最快最省心)

Jenkins默认用HTTPS的更新中心,我们直接换成HTTP版本,绕开SSL验证问题:

  • 如果你想在启动时就配置好,修改你的Dockerfile:
FROM jenkins/jenkins:latest
USER root
# 替换插件更新源为HTTP地址
RUN echo "http://updates.jenkins.io/update-center.json" > /var/jenkins_home/hudson.model.UpdateCenter.xml
USER jenkins
  • 要是已经启动过容器,也可以手动在Jenkins UI里改:进入「Manage Jenkins」→「Manage Plugins」→「Advanced」,把Update Site的URL改成http://updates.jenkins.io/update-center.json,点Submit保存就行。

方案2:全局禁用Java的SSL证书验证(适合临时POC)

如果一定要用HTTPS源,可以通过JAVA_OPTS让Java忽略所有证书验证——注意这个是全局生效的,生产环境绝对不能用,只适合临时测试:

  1. 修改Docker Compose里的JAVA_OPTS,添加跳过验证的参数:
environment:
  DOCKER_SOCKET: /var/run/docker.sock
  ALL_PROXY: "http://our.proxy.com:1234"
  JAVA_OPTS: "-Dhttp.proxyHost=our.proxy.com -Dhttp.proxyPort=1234 -Dhttps.proxyHost=our.proxy.com -Dhttps.proxyPort=1234 -Djavax.net.ssl.trustStore=/tmp/empty.truststore -Djavax.net.ssl.trustStorePassword=changeit -Djavax.net.ssl.trustStoreType=JKS"
  1. 然后在Dockerfile里创建一个空的Java信任库(Java不能用空路径的信任库):
FROM jenkins/jenkins:latest
USER root
# 创建一个空的dummy信任库
RUN keytool -genkey -noprompt -alias dummy -dname "CN=localhost" -keystore /tmp/empty.truststore -storepass changeit -keypass changeit
USER jenkins

这样Java会用这个空信任库,相当于直接跳过所有证书验证。

补充:怎么看Jenkins的Java启动命令?

你说看不到Java命令,其实可以用docker exec jenkins ps aux进入容器后查看进程列表,就能看到完整的Jenkins启动命令和JAVA_OPTS参数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:27:27