【问题标题】:Use spring-actuator with Spring-Boot default Docker-Image builder将 spring-actuator 与 Spring-Boot 默认 Docker-Image 构建器一起使用
【发布时间】:2021-06-23 16:23:15
【问题描述】:

我在由 docker-compose.yml 文件管理并使用 portainer 可视化的 Docker 环境中使用 Spring-Boot 2.4.4。我正在使用 Spring-Boot 内置构建器(使用 paketo-buildpacks)构建我的 Docker 映像

mvn spring-boot:build-image

我想用 spring-actuator 监控我的 Docker 容器。所以我添加了 maven 依赖项,当我在本地运行我的应用程序并访问某个页面时,我得到了想要的结果:

http://localhost:8080/actuator/health

由于我使用的是 Spring-Boot 内置 Docker 映像构建器,因此我没有 Dockerfile 来添加健康点。当我在 docker-compose.yml 中添加 healtheck 时,找不到 wget 命令:

    healthcheck:
      test: wget --spider --quiet 'http://localhost:8080/actuator/health/' || exit 1
      interval: 10s
      timeout: 3s
      retries: 10
      start_period: 10s

我做错了什么?我在网上找不到任何文档。我认为 Spring-Boot 能够自行检测到 spring-actuator,但我认为它不会。

【问题讨论】:

    标签: spring-boot docker spring-actuator paketo


    【解决方案1】:

    wgetcurl 命令都不包含在用于运行 Spring Boot 应用程序的基本映像中。也许你可以挂载另一个 util 卷:https://stackoverflow.com/a/65854305/8335251

    或者,只需编写另一个轻量级 Java 应用程序来请求健康执行器,将结果映射到退出代码。然后打包成jar,基于Spring Boot应用镜像用jar包构建另一个镜像。之后,可以使用java -jar 命令运行健康检查。

    【讨论】:

    • 感谢您的回复。我去看看那个。
    【解决方案2】:

    您可以切换打包容器映像时使用的构建器。请参阅image customization settings here

    默认构建器是paketobuildpacks/builder:base,它的运行映像不包括curlwget。您可以将构建器切换到paketobuildpacks/builder:full,并且您应该拥有curl(也可能是wget,我不确定我的想法)。

    这里的权衡是运行图像更大,因此您构建的图像的大小会增加。完整图像在 1G 左右有相当多的东西和权重,而基础图像大约 100M。

    Docker 在下载层方面很聪明,所以如果你有 50 个基于同一个完整构建器镜像的应用程序,它不会导致下载 50G。 Docker(和其他容器运行时)只下载它还没有的层,因此额外的 gig 基本上是一次性下载的。最终,您必须确定拥有curl 的便利是否值得图像中的额外尺寸。

    【讨论】:

    • 你好丹尼尔。谢谢您的答复。我想利用较小的图像尺寸。暂时,我得出的结论是不使用执行器工作。如果可能,我将寻找其他可能性或使用新的构建器版本重新实现它们。
    • 是的,您可以创建自己的运行映像和使用运行映像的构建器。这在技术上并不困难(基本上只是一个基于 Paketo 运行映像的 Dockerfile,并带有您的修改)。挑战在于您负责及时重建和更新运行映像以获取安全修复程序。
    猜你喜欢
    • 2018-09-03
    • 2018-05-02
    • 2019-03-27
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 2017-03-23
    相关资源
    最近更新 更多