DockerでExited (137)とエラー出た

はじめに

こんにちは、サクたか(@saqtaka)です。

Dockerで運用しているWordPressにある日突然Error establishing a database connectionとでて記事が表示されなくなっていました。

Error establishing a database connection

データベースに接続できないという意味。establishingは確立という意味です。

原因特定

まずAmazon Linuxにsshでログインして、動いているDockerコンテナの一覧を出しました。

sudo docker ps

あるはずのMySQLがないので落ちてしまっているみたいだったので、

sudo docker ps -a

で全てのコンテナ一覧をだしました。

すると生きているWordPressのコンテナは

Up 2 weeks

落ちてるMySQLのコンテナは

Exited (137) 9 hours ago

と出ていて、MySQLとの接続が確立できなかった理由はMySQLのコンテナが終了してしまっていたからでした。

ログ解析

落ちた原因を探るためにコンテナのログを出しました。

sudo docker logs [container]

落ちた日にちのログは一件もなかったので、

sudo docker start [container]

でMySQLのコンテナを立ち上げて

sudo docker exec -it [container] bash

でMySQLのコンテナに入ってみました。

cd /etc
ls

でフォルダの中を覗くと

debian_version

というファイルを発見したのでMySQLの公式コンテナはDebianがベースみたいです

ログファイルが保存されている場所へ移動する。

cd /var/log

フォルダの中のファイルを確認したが分からず、、、

はじめに出てきた

Exited (137) 9 hours ago

の137が気になって調べてみると

https://success.docker.com/article/what-causes-a-container-to-exit-with-code-137

に書いてありました。

メモリが足りなくなったようです。

サイトには

journalctl -k | grep -i -e memory -e oom

を試すと良いと書いてありますがAmazon Linuxにはjournalctlがないので、

sudo less messages | grep -i -e memory -e oom

で代用しました。すると、

Out of memory: Kill process 2957 (mysqld) score 301 or sacrifice child

とログが出ているのが確認できました。やっぱりメモリが足りなくなったようです。

参照

Dockerの公式ドキュメントサイトがあります。

https://docs.docker.com

で137とかエラーコードを入力すれば情報が出てきたので役立ちそうです。

関連記事

このページをGitHubで編集する 更新日 Sun, Aug 22, 2021