使用 Spring Boot Paketo Buildpack 时等效的 Dockerfile "VOLUME"

Dockerfile "VOLUME" equivalent when using Spring Boot Paketo Buildpack

我目前正在努力将 Spring Boot App 的容器化从 Dockerfile 文件迁移到 Spring Boot Maven 插件 build-image

现在我想知道如何在这种情况下配置卷。相当于在 Dockerfile 中有一个 VOLUME ["/var/store"] 声明。我已经用谷歌搜索了一段时间,感谢帮助。谢谢!

这取决于目的。

  1. 如果你想在 buildpacks 运行ning 时添加一个卷装载,那么你会添加一个 <binding> 到你的 pom.xml.

https://docs.spring.io/spring-boot/docs/2.5.2/maven-plugin/reference/htmlsingle/#build-image.customization

Volume bind mounts that should be mounted to the builder container when building the image. The bindings will be passed unparsed and unvalidated to Docker when creating the builder container.

Bindings must be in one of the following forms:

  • <host source path>:<container destination path>[:<options>]

  • <host volume name>:<container destination path>[:<options>]

Ex:当 buildpacks 执行

时导致 /host/workspace 被挂载到 /workspace
<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <bindings>
                            <binding>/host/workspace:/workspace</binding>
                        </bindings>
                    </image>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

如果使用 pack cli 而不是 Spring Boot 的 Maven 插件,这将与使用 pack build --volume 标志相同。

  1. 您可以在 运行 您的应用程序时绑定卷。这只是为您的容器 运行 时间使用标准工具和参数。例如,您可以 docker run -v 并映射到一个卷中。

  2. 如果您想要 Dockerfile 中 VOLUME 条目的特定行为(实际上不会执行上面的 1 或 2),则不会为使用 Buildpack 创建的图像公开,这Spring Boot 正在使用什么。如果这是你想要的,我鼓励你 并重新考虑你是否真的需要它。