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

我一直在试验docker。 作为它的一部分,我一直在使用一个简单的弹簧启动应用程序,

https://github.com/siva54/simpleusercontrol

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

2017-07-03 02:27:25.388 INFO 5 — [ost-startStop-1] osweb.context.ContextLoader:根WebApplicationContext:初始化在4963 ms完成

但是当我用docker swarm运行同样的东西时,应用程序占用的时间更长,

2017-07-03 00:32:56.483信息5 — [ost-startStop-1] osweb.context.ContextLoader:根WebApplicationContext:初始化在48699 ms完成

此外,应用程序不启动,而是在日志(docker日志<>),我看到看到一个string值“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”来拉取图像。

如果你可以启动应用程序,并find链接(本地主机:8080 / swagger-ui.html#/)为你工作,这应该是工作。

下面是用来运行群,

初始化群

docker群初始化

运行应用程序

docker堆栈部署-c docker-compose.yml app1

以下是用于运行没有群,

docker运行siva54 / simpleusercontrol

所有这些都是在使用stream浪者创build的图像上完成的。

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

  1. 日志中的Killed消息通常是Linux Kernel 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。