Docker退出状态1,用于AWS上的Node应用程序

我正在使用Express.js,Node,mongoose和docker在AWS上托pipe一个testing版应用程序。 日常活跃用户<10,主要是我的朋友进行testing。 由于某种原因,该应用几乎每天都在运行。 最初我以为这是AWS的问题,所以我停止了我的应用程序,从免费层更改为t2.medium,并再次启动它。

它没有解决这个问题,我检查了docker日志的容器。 这不是OOMKilled造成的。

"State": { "Status": "exited", "Running": false, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 0, "ExitCode": 1, "Error": "", "StartedAt": "2017-03-22T00:51:59.234643501Z", "FinishedAt": "2017-03-22T07:21:41.351927073Z" }, "Config": { ... "AttachStdin": false, "AttachStdout": true, "AttachStderr": true, ... } 

我可以设置docker总是重新启动,但我想弄清楚它的根本原因是什么。 有什么build议么?

这发生在每个人身上。 许多事情可以杀死快递应用程序,如奇怪的HTTP请求。 Docker日志应该显示exception。 添加一个uncaughtException处理程序来logging问题。

 process.on('uncaughtException', (e) => { console.error(e); // try console.log if that doesn't work process.exit(10); }); 

如果在Docker日志中找不到错误,那么可以login到一个文件(确保它在一个停留在Docker运行之间的卷中),而不是login到控制台。

人们不喜欢承认这一点,但许多应用程序实际上只是loggingexception,并吃掉它,继续进入uncaughtException处理程序而不退出。 因为破碎的请求或其他无关紧要的东西经常会导致服务器死机,所以通常可以避免这种情况。 但是偶尔有一段时间你会被一些奇怪的发生在服务器状态的东西烧毁,无法恢复,你不知道,因为你只是吃了一个例外。

您可能可以让它自动启动应用程序https://docs.docker.com/docker-cloud/apps/autorestart/这可能是一个很好的解决scheme&#x3002;

否则,请查看使用pm2和Docker的示例,如果可能的话,pm2将处理重新启动。