2017-03-29 11 views
1

私は、Express.js、Node、mongoose、およびdockerを使用してAWSでベータ版アプリケーションをホスティングしています。毎日アクティブなユーザー< 10、主にテスト用の私の友人。アプリは何らかの理由でほぼ毎日ダウンしています。当初はAWSの問題だと思っていたので、アプリを停止し、フリー層からt2.mediumに変更してもう一度起動しました。AWS上のノードアプリケーションのドッカー終了ステータス1

問題を解決しなかったため、コンテナのドッカーログを確認しました。それは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, 
     ... 
    } 

いつも再起動するようにドッカーを設定することができましたが、その根本原因を突き止めたいと思います。助言がありますか?

答えて

0

これは誰にとっても起こります。奇妙なHTTPリクエストなど、Expressアプリケーションを殺すことができるものはたくさんあります。 Dockerログに例外が表示されるはずです。問題を記録するためにuncaughtExceptionハンドラを追加してください。

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

あなたの代わりに、コンソールへのロギングを、その後、多分あなたは(それがドッカーがが実行される間とどまるボリュームであることを確認してください)ファイルにログを記録することができ、ドッカーログにエラーを見つけることができない場合。

人々はこれを認めるのが好きではありませんが、多くのアプリケーションは実際に例外をログに記録し、それを食べ、終了せずにuncaughtExceptionハンドラに入り続けます。問題のないリクエストや問題のないものはサーバを殺すことが多いため、通常はこれで逃げることができます。しかし、しばらくの間、サーバーの状態に何か変わったことが起こると、それは回復できず、あなたは例外を食べただけなので、あなたは分かりません。

アプリを自動再起動することができます。https://docs.docker.com/docker-cloud/apps/autorestart/これは良い解決策です。

そうでなければ、可能であればpm2とDockerを使用する例を見てください。pm2は再起動を処理します。

関連する問題