我一直在试验码头工人。作为其中的一部分,我一直在使用简单的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创建的图像上完成的。
答案 0 :(得分:2)
这里有两件事在我身上跳出来。
Killed
消息通常是Linux内核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。