首页 > 解决方案 > Dockerized Java Spring Boot 应用程序在启动应用程序时抛出 504 Bad Gateway

问题描述

我有一个部署在 docker 数据中心的 java spring boot 应用程序。每当我们为服务部署堆栈时,正如预期的那样,它会杀死现有容器并使用新图像启动新容器。但问题是当spring应用程序在容器内启动时我们得到504 Bad Gateway,这通常是30-40秒。我的预感是由于容器已启动并正在运行,负载均衡器向容器发送请求但应用程序仍在启动,有没有办法解决这个问题?它会产生影响,因为我们有 5 个服务容器,每个容器都会发生同样的事情。因此,在发生这种情况时,很大一部分用户会遇到错误。

标签: javaspringdockerspring-boot

解决方案


您的撰写文件中有一个解决方案:update_config

version: '3.4'
services:
  your-app:
    image: your/image:old
    deploy:
      replicas: 5
      update_config:
        parallelism: 2
        delay: <yourStartupTimeInSeconds+3>s
        order: stop-first

因此,当您部署 的更新版本时your/image,swarm 将关闭两个容器,部署两个新容器,等待<yourStartupTimeInSeconds+3>几秒钟,直到使用新映像部署 2 个其他副本,再次等待并部署剩余的一个。

无论如何,您前面的负载均衡器(服务)都会进行健康检查(节点可能会失败),对吗?


推荐阅读