java - Maven JIB 在 arm32v7/adoptopenjdk docker 容器内返回“CertPathValidatorException:签名检查失败”
问题描述
我正在使用安装了 Docker 的树莓派 4。我正在尝试为我的 Java 项目创建一个构建容器,并让构建容器使用Maven JIB创建 Docker 映像。当我在arm32v7/adoptopenjdk:13.0.1_9-jdk-hotspot-bionic容器中尝试此操作时,JIB 给出以下错误:
[ERROR] I/O error for image [registry-1.docker.io/arm32v7/adoptopenjdk]:
[ERROR] PKIX path validation failed: java.security.cert.CertPathValidatorException: signature check failed
当我在笔记本电脑上的 Ubuntu 虚拟机中尝试相同的设置时,安装了 Docker 并使用了openjdk:13-jdk容器,它成功了。
我正在尝试使用 JIB 作为构建插件构建一个简单的spring initialzr java 项目。我的 pom.xml 中的构建标记如下所示:
pom.xml
<build>
<finalName>thaveke-backend</finalName>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>1.8.0</version>
<configuration>
<from>
<image>arm32v7/adoptopenjdk:13.0.1_9-jdk-hotspot-bionic</image>
</from>
<to>
<image>backend</image>
</to>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>dockerBuild</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
由于 PKIX 错误,我立即想到了一个过时的 cacerts,所以我将 cacerts 文件从它工作的openjdk:13-jdk容器复制到arm32v7/adoptopenjdk:13.0.1_9-jdk-hotspot-bionic容器并运行maven 命令,但仍然收到相同的错误。
如果您有带有 Debian Buster OS 的 raspberry pi 4,则可以使用以下步骤重现此错误:
- 使用以下命令安装 docker:
curl https://get.docker.com | sh
- 创建一个简单的spring initialzr项目并在树莓派上解压。更新 pom.xml 文件中的构建标记,使其看起来像我上面的那样。在我的例子中,解压后的更新代码在 /opt/app 下。
- 运行 docker 容器并使用以下命令进入 bash 终端:
docker run --rm -it -v /opt/app:/opt/app -v /var/run/ docker.sock:/var/run/docker.sock -v $(which docker):$(which docker) arm32v7/adoptope njdk:13.0.1_9-jdk-hotspot-bionic bash
- 在 docker 容器中,将目录更改为 /opt/app:
cd /opt/app
- 运行 maven 命令编译构建 docker 镜像:
./mvnw clean package -DskipTests
我不确定这是 JIB 错误、AdoptOpenJDK 错误还是我只是忽略了什么?
亲切的问候
解决方案
我遇到了与在 jib docker 映像内的树莓派上运行采用 openjdk 非常相似的情况。这个问题似乎有些相关。我最终使用了来自 bellsoft 的不同 jdk。我使用的是 gradle jib 而不是 maven 插件,但它应该可以正常工作。祝你好运。
from {
// https://github.com/GoogleContainerTools/jib/issues/2148
image = "bellsoft/liberica-openjdk-alpine@sha256:91a5cede9b201c98ef6fc13aff270f58f07bee86ed9f508e22c7a883bfef2679"
}
推荐阅读
- javascript - 如何确认我使用 window.open window.document.write 创建的页面是否已加载
- html - 引导卡内联块
- javascript - 如何更新使用自定义 Hook 的变量的状态值
- r - 如何使用实验的重复进行绘图并执行标准。图中重复的偏差?
- excel - 如何将多个搜索添加到单个代码
- flutter - InheritedWidget 在小部件树 Flutter 中将数据设为 null
- php - Mysql:按日期交集选择,而不是之间
- c# - 任意大小的 C# ValueTuple
- javascript - 如何防止通过 JavaScript 访问我的网站
- php - 为什么我没有从数据库中获取 $user_name?