13

我有一个简单的 SpringBoot 应用程序,我想使用Jib Maven 插件构建 docker 映像。以下是我的插件配置:

<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>2.1.0</version>
    <configuration>
        <from>
            <image>openjdk:11-jdk-slim</image>
        </from>
        <to>
            <image>username/appname</image>
            <tags>
                <tag>latest</tag>
                <tag>${project.version}</tag>
            </tags>
        </to>
        <container>
            <mainClass>demo.Application</mainClass>
            <ports>
                <port>8080</port>
                <port>8787</port>
            </ports>
        </container>
    </configuration>
</plugin>

我只想在本地构建图像并运行它。我不想一口气构建并推送到 docker 注册表。

当我运行命令mvn jib:build时,它会使用我来自 Docker config (/Users/username/.docker/config.json)的凭据自动推送到 DockerHub 。

有没有办法可以禁用推送和另一个目标只是将图像推送到注册表?

4

3 回答 3

9

既然你说jib:dockerBuild不是一种选择,最接近的解决方法是jib:buildTar; target/jib-image.tar目标在(使用 可配置的路径)创建一个本地 tarball <outputPaths><tar>。第一次运行jib:buildTar(或任何jib:...目标)将构建并缓存构建映像所需的所有内容。因此,就构建层而言,后续jib:build运行将是无操作的。它只需要发送远程注册表中缺少的层。

当然,解决方法的一个缺点是它会创建一个不必要的 tarball,它可能很大。


与你的问题无关,你不需要设置<tag>latest</tag>,因为目标图像参考<image>username/appname<image>已经暗示了<image>username/appname:latest<image>。该<tags>配置用于<to><iamge>.

于 2020-03-26T14:26:33.800 回答
3

从 JIB 文档Jib Maven Plugin,您可以运行

mvn jib:dockerBuild

这将在构建后将图像推送到 Docker 守护程序。

于 2020-09-02T08:11:41.820 回答
-2

我刚刚检查了一下,可以在本地使用 Jib 构建的图像。首先确保您的 Docker 守护程序在本地运行。然后这样做:

    <to>
        <image><your-local-image-name></image>
    </to>

我猜你的可能没有工作,因为你的 Docker 守护程序没有运行,或者你的图像名称以你的用户名开头,这让 Jib 认为你实际上想要将图像推送到 Docker Hub。

于 2020-08-13T11:06:16.907 回答