当前位置: 首页 > 知识库问答 >
问题:

使用“mvn编译jib:build”推送到Docker注册表失败

彭琛
2023-03-14

我正在尝试使用Google JIB maven插件构建我的docker映像并将其部署到私有注册表。但是,它因访问私有注册表而失败。

我已在我的Windows 10机器上安装了Docker Desktop v19.03.1。接下来,我正在尝试使用Google JIB Maven插件构建我的Spring Boot应用程序,然后推送构建在私有注册表上的映像。

我已将证书添加到“示例”。注册处。com'到Windows受信任的证书。我可以使用docker命令登录到private registry进行验证,如下所示:-

docker登录示例。注册处。通用域名格式

此命令返回身份验证成功,这意味着我添加的证书已被接受。

登录到私有注册表后,我可以使用docker命令行将图像拉入并推送到“示例”。注册处。com’成功。

下面是我的POM。xml文件。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>1.5.1</version>
    <configuration>
        <to>
           <image>example.registry.com/inventory-service-docker:1.0</image>
            <auth>
               <username>plaintextusernameforRegistry</username>
               <password>plaintestpasswordforRegistry</password>
           </auth>
        </to>
        <from>                           
             <image>openjdk:8</image>
        </from>
        <container>
           <ports>
              <port>8089</port>
           </ports>
        </container>
        <allowInsecureRegistries>true</allowInsecureRegistries> <!-- this is commented on the first run.-->
    </configuration>
</plugin>

当我使用pom目录从控制台运行“mvn compile jib:build”命令时。xml文件,它确实会启动处理,但在稍后阶段失败,错误如下:-

[错误]无法执行目标com.google.云工具:jib maven插件:1.5.1:project inventory service docker上的build(默认cli):build image失败,也许您应该使用支持HTTPS的注册表或设置配置参数“allowInsecureRegistries”:在https://example.registry.com/v2/inventory-service-docker/blobs/sha256:9cc2ad81d40d54dcae7fa5e8e17d9c34e8bba3b7c2cc7e26fb22734608bda32e因为只允许安全连接。

当我按照上面的错误建议设置配置参数“allowInsecureRegistries”后运行相同的命令时,我得到了一个不同的错误,如下所示:-

[错误]无法执行目标com.google.云工具:jib maven插件:1.5.1:project inventory service上的build(默认cli)docker:build image失败:无法使用注册表示例进行身份验证。注册处。com/库存服务docker因为:sun。安全验证器。ValidatorException:PKIX路径生成失败:sun。安全供应商。certpath。SunCertPathBuilderException:找不到请求目标的有效证书路径

看起来像是我在使用未连接到“示例”的JIB时缺少的一些配置。注册处。通讯安全

共有1个答案

林弘壮
2023-03-14

(在开始之前,请不要使用Jib 1.5. x,因为这些版本存在网络性能问题。)

JVM不使用Windows证书存储

JRE的一个大问题是它完全忽略了Windows证书存储。它不使用windows证书存储,而是使用自己的实现

我在另一个答案中发现,Windows的一个潜在选项是使用-Djavax启动Java。网ssl。trustStoreType=WINDOWS-ROOT。但我还没有证实这是否有效。

另一种方法是将证书添加到默认的Java证书存储(truststore)文件(cacerts)。它通常位于

有多种方法可以添加证书(例如,使用各种GUI工具)。例如,

  • 在命令行上
keytool.exe -import -storepass "changeit" -keystore "C:\Program Files (x86)\Java\jre1.8.0_144\lib\security\cacerts" -alias certificate.cer -file "C:\certificate.cer" -noprompt
  • 使用名为KeyStore Explorer的GUI工具

最后,对于那些想要获得更多解决此类Java证书问题的想法的人,请查看此评论。

 类似资料:
  • 我无法将docker映像推送到低于错误的工件注册表 登录和拉取工作正常 詹金斯档案: Dockerfile: 我不确定这是怎么回事。我可以在jenkins从属节点上手动推送图像。但使用詹金斯会产生错误 我构建工作的日志 这是我的构建日志中的内容。

  • 我无法将docker映像推送到heroku注册表。 根据docker的说法,我已成功登录: 在那之后,我运行了,我得到了一些令人困惑的错误,说我试图推送到一个不安全的repo,而de-output中的url看起来是安全的(以https开头)。我做错了什么? 我正在使用以下jib配置: jib的Maven输出:build wiht-X:

  • 试图将Gradle项目推送到Github包注册表,但未按预期工作。 使用Gradle插件。 在带有需要发布的数据-代码如下。并运行发布任务。没有收到错误,但在GitHub包注册表中看不到我的包。 期待一些例子,如何发布到Github包注册表与Gradle或我在发布时做错了什么

  • 我有一个小问题与我的docker注册表上openshift源安装。 我创建了一个docker注册表pod: 创建了一条路线: 创建了一个服务: Openshift的Master是在10.0.2.235上的,只有一个节点,现在我已经创建了一个spring boot应用程序,我使用maven插件docker来构建和推送映像。 当我在本地(主计算机上)运行maven push时,工作正常,但如果我在另一

  • 我试图使用fabric8 docker client for Java将一个docker图像推送到dockerhub。

  • 我正在使用fabric8 maven插件在Google云平台上运行的Jenkins上构建Docker映像。 该插件提供了将图像推送到Docker注册表的功能,但我无法使其与Google容器注册表一起工作,因为它无法进行身份验证。 从我的Jenkins管道中,我可以使用和访问注册表。 对于访问Docker注册中心,Fable8 Maven插件可以与凭据或扩展身份验证一起使用,但这似乎仅适用于AWS。