通过mesos-marathon部署集装箱化的node.JS应用程序

我正在使用Marathon部署我的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

是否有可能杀死任务释放内存,以便马拉松可以重新生成它,而无需重新启动/closures服务器? 还是有没有其他的方法来使Docker容器可路由到外部世界而不使用--net=host

基本上,我认为如果Node应用程序显示内存泄漏行为,那么您的Node应用程序有问题。 这是我要说的第一点。

第二个是你应该在应用程序的Docker镜像中使用像pm2这样的东西,当遇到问题时,它将负责重新启动你的应用程序(在容器本身)。

而且,你可以实现一个Marathon健康端点 ,这样马拉松就可以认识到应用程序确实有问题。

为了达到一些冗余,我强烈build议您至less运行两个应用程序实例,并在公共从属节点上使用Mesos DNS和负载均衡器(如marathon-lb ),这将负责路由。 这也使您可以使用桥接networking,如果你想。