我正在使用马拉松来部署我的Docker容器化node.js应用程序。我的马拉松应用规格如下:
{
"id": "<some-name>",
"cmd": null,
"cpus": 1,
"mem": 2800,
"disk": 30720,
"instances": 1,
"container": {
"docker": {
"image": "<some-docker-registry-IP>:5000/<repo>",
"network": "BRIDGE",
"privileged": true,
"forcePullImage": true,
"parameters": [
{
"key": "net",
"value": "host"
}
],
"portMappings": [
{
"containerPort": <some-port>,
"hostPort": <some-port>,
"protocol": "tcp",
"name": null
}
]
},
"type": "DOCKER"
}
}然而,问题是,这会导致我的服务器重新启动,一旦内存不足,就会在服务器上部署应用程序。我需要我的服务来监听主机的内网IP,这就是我使用--net=host的原因。
有没有可能只是杀死任务,释放内存,这样Marathon就可以在不重新启动/关闭服务器的情况下重新生成它?或者,有没有其他方法可以使Docker容器在不使用--net=host的情况下可以路由到外部世界?
发布于 2016-05-12 17:35:30
基本上,我认为如果Node应用程序显示内存泄漏行为,那么它就有问题。这是我要解决的第一点。
第二个是你应该在你的应用程序的Docker镜像中使用类似pm2的东西,当你的应用程序遇到问题时,它将负责重启你的应用程序(在容器本身中)。
此外,您还可以实现一个Marathon health endpoint,这样马拉松就可以识别出应用程序实际上存在问题。
为了实现一些冗余,我强烈建议您至少运行应用程序的两个实例,并在公共从节点上使用Mesos DNS和一个负载均衡器(如marathon-lb ),它将负责路由。如果您愿意,这也允许您使用桥接网络。
https://stackoverflow.com/questions/37180273
复制相似问题