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的图像上完成的。
有两件事情在我这里跳出来。
- 日志中的
Killed
消息通常是Linux Kernel OOM杀手生成的东西。 我会检查主机上的dmesg
的输出,也可能是docker ps -a
,docker service ls
和docker stack ls
,看它们是否显示任何调度或退出代码错误。 这可能表示主机没有足够的内存(例如,如果主机只有512 MB的内存,则应用程序+主机操作系统可能超出限制)。 - 您链接到
docker-compose.yml
定义了128 MB的内存限制。 但是,当我运行从该图像启动一个普通的容器,它正在使用大约345 MB空闲。 我猜测,128 MB的限制是导致JVM垃圾收集器超时工作,导致应用程序启动速度慢。 这也可能是OOM杀手扼杀应用程序的原因。 我会尝试将内存限制增加到512 MB。