【问题标题】:Maven JIB returns "CertPathValidatorException: signature check failed" inside arm32v7/adoptopenjdk docker containerMaven JIB 在 arm32v7/adoptopenjdk docker 容器内返回“CertPathValidatorException:签名检查失败”
【发布时间】:2020-04-29 12:35:07
【问题描述】:

我正在使用安装了 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,则可以使用以下步骤重现此错误:

  1. 使用以下命令安装 docker:curl https://get.docker.com | sh
  2. 创建一个简单的spring initialzr 项目并在树莓派上解压。更新 pom.xml 文件中的构建标记,使其看起来像我上面的那样。就我而言,解压后的更新代码位于 /opt/app 下。
  3. 运行 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
  4. 在 docker 容器内时,将目录更改为 /opt/app:cd /opt/app
  5. 运行maven命令编译构建docker镜像:./mvnw clean package -DskipTests

我不确定这是 JIB 错误、AdoptOpenJDK 错误还是我只是忽略了什么?

亲切的问候

【问题讨论】:

  • docker run --rm -it ... arm32v7/adoptopenjdk:13.0.1_9-jdk-hotspot-bionic 会给你一个 jshell 提示。 (如果您只是得到一个 sh 提示,请手动运行 jshell。)在 jshell 上,尝试 new URL("https://registry-1.docker.io/v2/").openStream() 以查看它是否仍然返回 PKIX 错误。 (OTOH,预计会得到 401。)如果它不起作用,那是 JVM 上的一些证书问题。

标签: java maven docker jib adoptopenjdk


【解决方案1】:

我遇到了与在 jib docker 映像内的树莓派上运行采用openjdk 非常相似的情况。这个issue 似乎有些相关。我最终使用了different jdk from bellsoft。我使用的是 gradle jib 而不是 maven 插件,但它应该可以正常工作。祝你好运。

from {
  // https://github.com/GoogleContainerTools/jib/issues/2148
  image = "bellsoft/liberica-openjdk-alpine@sha256:91a5cede9b201c98ef6fc13aff270f58f07bee86ed9f508e22c7a883bfef2679"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2020-07-26
    • 2021-08-18
    • 2019-04-01
    • 2011-04-25
    • 1970-01-01
    • 2021-05-29
    相关资源
    最近更新 更多