【发布时间】:2021-12-30 08:46:40
【问题描述】:
问题:
部署 Jenkins 时,在安装插件时,每个插件都无法下载并出现以下 Java 错误:
Caused: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
疑难解答:
- 部署在环境中而不是在代理后面,这工作正常。
- 尝试更改 docker 映像类型(使用“jenkins”和“jenkinsci”均无效)找到信息here。
- 阅读所有this post 那里没有任何帮助。
- jenkins 似乎正试图从 URL 中提取插件,但无法验证证书。我尝试为“-k”添加 curl 选项,但这没有帮助。我还尝试在容器外使用 curl 下载以查看发生了什么。看来我需要使用“-kL curl --proxy our.proxy.com:1234”来实际拉取插件网址并让它工作。但是,当添加
ENV CURL_OPTIONS -Lk --proxy our.proxy.com:1234并启动容器时,我仍然看到相同的错误。 - 尽管阅读this post 以及如何将 URL 列入白名单,但我认为这不是我们的问题,因为 A)我能够从一个镜像中提取而无需调整我们的代理 B)错误说这是一个认证路径问题。
- 为什么我可以通过容器外的 curl+proxy 获取插件 url,但是当 Java 尝试这样做时,我得到证书错误?从 docker log 输出中我不清楚用于提取插件的 java 命令,所以我不确定发生了什么。
- 是否有从 Java 禁用证书验证的选项?我现在只需要它作为 POC 工作,所以我现在不关心验证检查,我可以稍后实现。这也是通过代理,我无权访问代理 CA 信任或证书。只想停用任何建议?
环境:
- Ubuntu 服务器 18.04
- Docker 版本:20.10.10
- Docker 组合版本:1.29.2
配置文件:
- Docker 编写文件:
version: '3.7'
services:
jenkins:
container_name: jenkins
build:
context: ./jenkins
dockerfile: ./jenkins.Dockerfile
ports:
- 8080:8080
- 50000:50000
volumes:
- jenkins-data:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
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"
privileged: true
volumes:
jenkins-data:
- Docker 文件:
FROM jenkins/jenkins:latest
USER root
ENV CURL_OPTIONS -k --proxy our.proxy.com:1234
【问题讨论】:
标签: java docker jenkins certificate containers