1

我在由 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,但我认为它不会。

4

2 回答 2

0

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

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

于 2021-03-29T15:44:03.523 回答
0

您可以切换打包容器映像时使用的构建器。请参阅此处的图像自定义设置

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

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

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

于 2021-05-19T02:34:36.877 回答