Docker swarm部署需要时间并导致容器终止服务

时间:2017-07-03 02:41:22

标签: docker spring-boot docker-compose docker-swarm

我一直在试验码头工人。作为其中的一部分,我一直在使用简单的spring-boot应用程序,

https://github.com/siva54/simpleusercontrol

当我在简单的docker容器中运行应用程序时,我看到应用程序日志显示以下行,

  

2017-07-03 02:27:25.388 INFO 5 --- [ost-startStop-1]   o.s.web.context.ContextLoader:Root WebApplicationContext:   初始化在4963 ms完成

然而,当我使用docker swarm运行相同的东西时,应用程序需要更长的时间,

  

2017-07-03 00:32:56.483 INFO 5 --- [ost-startStop-1]   o.s.web.context.ContextLoader:Root WebApplicationContext:   初始化在48699 ms完成

该应用程序也没有启动,而是在日志(docker logs<>)中,我确实看到了一个字符串值" Killed"。我猜这可能是由于时间过长,可能是docker上的超时设置可能会导致服务中断。

任何人都可以帮我设置超时或修复应用程序,以免花费大量时间。

请查看以下链接以获取更多信息,

Docker版本:Docker版本17.06.0-ce,build 02c1d87

Dockerfile(https://github.com/siva54/simpleusercontrol/blob/master/Dockerfile

Docker撰写(https://github.com/siva54/simpleusercontrol/blob/master/docker-compose.yml

如果有人想试验我的应用程序,您可以使用" siva54 / simpleusercontrol"来提取该图像。

如果您可以启动应用程序并找到适合您的链接(localhost:8080 / swagger-ui.html#/),那应该可以。

以下用于运行swarm,

初始化群

  

docker swarm init

运行应用程序

  

docker stack deploy -c docker-compose.yml app1

以下用于在没有群体的情况下运行,

  

docker run siva54 / simpleusercontrol

这一切都是在使用vagrant创建的图像上完成的。

1 个答案:

答案 0 :(得分:2)

这里有两件事在我身上跳出来。

  1. 日志中的Killed消息通常是Linux内核OOM杀手生成的内容。我会在主机上检查dmesg的输出,也可能检查docker ps -adocker service lsdocker stack ls,以查看它们是否显示任何计划或退出代码错误。这可能表明主机没有足够的内存(例如,如果主机只有512 MB内存,则应用程序+主机操作系统可能超出限制)。
  2. 您链接的docker-compose.yml定义内存限制为128 MB。但是当我从该图像开始运行常规容器时,它使用大约345 MB空闲。我猜测128 MB的限制导致JVM垃圾收集器超时工作,导致应用程序的启动时间变慢。它也可能是OOM杀手杀死应用程序的原因。我尝试将内存限制提高到512 MB。