use*_*729 5 docker docker-compose docker-swarm
我有 tomcat 在一个群中作为 docker 服务运行。当服务启动时,它会将大量数据加载到内存中,这取决于 10 到 30 分钟之间的数据量。
我的问题是,当我更新服务(order:start-first)时,旧容器在新容器初始化它的数据之前停止,因此还没有准备好使用。
在我看来,docker-compose 中的健康检查配置是一个很有前途的方法:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/areyouready"]
interval: 10s
timeout: 10s
retries: 30
Run Code Online (Sandbox Code Playgroud)
健康检查工作正常,但旧服务也会关闭,而测试为新服务返回 1(不健康)。
我还尝试在我的应用程序中处理 SIGTERM:正在运行的服务获取 sigterm 并根据新服务的状态检查它是否应该已经停止:
Runtime.getRuntime().addShutdownHook(new Thread()
{
@Override
public void run()
{
// via db access determine the state of the new started containers, but I don't know
// how to prevent my tomcat from stopping here
}
}
Run Code Online (Sandbox Code Playgroud)
除此之外,我没有设法阻止我的 tomcat 停止它,只是似乎不是正确的方法。
我想要的解决方案是配置这样的东西:
update_config:
order: start-first
a-kind-of-stop-condition: ["CMD", "curl", "-f", "http://localhost:8080/areyouready"]
Run Code Online (Sandbox Code Playgroud)
然后条件请求应该转到新创建的容器,如果成功,旧的可能会停止。
如果你能指出我正确的方向,那就太好了。
亲切的问候,塞巴斯蒂安
| 归档时间: |
|
| 查看次数: |
324 次 |
| 最近记录: |