Docker swarm 部署需要时间并导致容器终止服务
Docker swarm deployment takes time and causes container to kill the service
我一直在试验 docker。作为其中的一部分,我一直在使用一个简单的 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:
initialization completed in 4963 ms
但是当我运行和docker swarm做同样的事情时,应用程序占用了更长的时间,
2017-07-03 00:32:56.483 INFO 5 --- [ost-startStop-1]
o.s.web.context.ContextLoader : Root WebApplicationContext:
initialization completed in 48699 ms
应用程序也没有启动,而是在日志中(docker 日志 <>),我确实看到了一个字符串值 "Killed"。我猜这可能是由于时间太长, docker 上的超时设置可能会终止该服务。
任何人都可以帮我设置超时或修复应用程序,以免花费那么多时间。
请在下面找到 link 了解更多信息,
Docker 版本:Docker 版本 17.06.0-ce,构建 02c1d87
Docker文件 (https://github.com/siva54/simpleusercontrol/blob/master/Dockerfile)
Docker 撰写 (https://github.com/siva54/simpleusercontrol/blob/master/docker-compose.yml)
如果有人想试用我的应用程序,您可以使用 "siva54/simpleusercontrol" 提取该图像。
如果您可以启动应用程序并找到适合您的 link (localhost:8080/swagger-ui.html#/),那应该可以。
以下用于运行群,
初始化集群
docker swarm init
运行 申请
docker stack deploy -c docker-compose.yml app1
下面的都习惯了运行没有swarm,
docker run siva54/simpleusercontrol
所有这些都是在使用 vagrant 创建的图像上完成的。
这里有两件事让我印象深刻。
- 日志中的
Killed
消息通常是由 Linux 内核 OOM 杀手生成的。我会检查主机上 dmesg
的输出,可能还会检查 docker ps -a
、docker service ls
和 docker stack ls
以查看它们是否显示任何调度或退出代码错误。这可能表明主机没有足够的内存(例如,如果主机只有 512 MB 内存,则应用程序 + 主机 OS 可能超出限制)。
docker-compose.yml
您 link 定义了 128 MB 的内存限制。但是当我 运行 从该图像启动一个常规容器时,它正在使用大约 345 MB 只是闲置。我猜测 128 MB 的限制导致 JVM 垃圾收集器超时工作,导致应用程序启动时间变慢。它也可能是 OOM 杀手杀死应用程序的原因。我会尝试将内存限制提高到 512 MB。
我一直在试验 docker。作为其中的一部分,我一直在使用一个简单的 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: initialization completed in 4963 ms
但是当我运行和docker swarm做同样的事情时,应用程序占用了更长的时间,
2017-07-03 00:32:56.483 INFO 5 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 48699 ms
应用程序也没有启动,而是在日志中(docker 日志 <>),我确实看到了一个字符串值 "Killed"。我猜这可能是由于时间太长, docker 上的超时设置可能会终止该服务。
任何人都可以帮我设置超时或修复应用程序,以免花费那么多时间。
请在下面找到 link 了解更多信息,
Docker 版本:Docker 版本 17.06.0-ce,构建 02c1d87
Docker文件 (https://github.com/siva54/simpleusercontrol/blob/master/Dockerfile)
Docker 撰写 (https://github.com/siva54/simpleusercontrol/blob/master/docker-compose.yml)
如果有人想试用我的应用程序,您可以使用 "siva54/simpleusercontrol" 提取该图像。
如果您可以启动应用程序并找到适合您的 link (localhost:8080/swagger-ui.html#/),那应该可以。
以下用于运行群,
初始化集群
docker swarm init
运行 申请
docker stack deploy -c docker-compose.yml app1
下面的都习惯了运行没有swarm,
docker run siva54/simpleusercontrol
所有这些都是在使用 vagrant 创建的图像上完成的。
这里有两件事让我印象深刻。
- 日志中的
Killed
消息通常是由 Linux 内核 OOM 杀手生成的。我会检查主机上dmesg
的输出,可能还会检查docker ps -a
、docker service ls
和docker stack ls
以查看它们是否显示任何调度或退出代码错误。这可能表明主机没有足够的内存(例如,如果主机只有 512 MB 内存,则应用程序 + 主机 OS 可能超出限制)。 docker-compose.yml
您 link 定义了 128 MB 的内存限制。但是当我 运行 从该图像启动一个常规容器时,它正在使用大约 345 MB 只是闲置。我猜测 128 MB 的限制导致 JVM 垃圾收集器超时工作,导致应用程序启动时间变慢。它也可能是 OOM 杀手杀死应用程序的原因。我会尝试将内存限制提高到 512 MB。