dockerコンテナーでExitedした時の原因を探す

http://blog.namiking.net/post/2015/09/docker-exec-exited/

ほとんど上の記事を参考にです。
多少コマンドのオプションがなくなっていたりしたのかハマったのでメモとして


```
% docker ps -a
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                      PORTS                  
                        NAMES
59e7516f6f6d        docker_manage   "supervisord --nod..."   15 minutes ago      Up 15 minutes               0.0.0.0:8080->80/tcp, 0
.0.0.0:44301->443/tcp   manage
064927d586cc        mysql:latest            "docker-entrypoint..."   15 minutes ago      Exited (1) 14 minutes ago                          
                        report-db
0c7225cced3d        mysql:latest            "docker-entrypoint..."   19 hours ago        Up 18 hours                 0.0.0.0:33061->3306/tcp
                        master-db
2d9e63e72f82        mysql:latest            "docker-entrypoint..."   19 hours ago        Up 18 hours                 0.0.0.0:33062->3306/tcp
                        log-db
```

と一台だけどうしてもmysqlのコンテナーが立ち上げられない。。
何故なのかExited(1)てもう少し情報をと思ってコンテナーに入れないかなと思って調査を。

記事に従い

```
% docker ps -q --filter status=exited
064927d586cc
```

コミットすればいいとあるのでコミットしてみる

```
% docker commit -t exited 064927d586cc
unknown shorthand flag: 't' in -t
See 'docker commit --help'.
```

-tはなんてないと言われる。。
とりあえずhelp見ろと言われているので見てみる

```
% docker commit --help                                                                                              

Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:
  -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
  -c, --change list      Apply Dockerfile instruction to the created image (default [])
      --help             Print usage
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)
```
確かに-tなんてない
とりあえずコミットすればいいのかなと思って-mつけてコミットメッセージをつけてコミットしてみる

```
% docker commit -m "exited" 064927d586cc
sha256:4333223352538d379ca37a815efde50e6aace5fdf1bd5ba29107f9b6cdd5c06a
```

おおコミットできた

これでとりあえず入ってみる

```
% docker run --rm -it 4333223352538d379ca37a815efde50e6aace5fdf1bd5ba29107f9b6cdd5c06a bash
root@2f20666de408:/#
```

入れた！！

でもなんで何かよくわからないそもそもdocker psした時のcommandが途中で切れていて分からないなと

```
% docker ps -a --no-trunc
CONTAINER ID                                                IMAGE                                                              COMMAND                                                                                        CREATED             STATUS                     PORTS                                          NAMES
4cef6544d0f5cf08e9fd13a517256d5305cd1c7296624632e4fd812ad67bb82e   4333223352538d379ca37a815efde50e6aace5fdf1bd5ba29107f9b6cdd5c06a   "docke
r-entrypoint.sh bash"                                                                    8 minutes ago       Up 8 minutes               3306
/tcp                                       reverent_saha
59e7516f6f6d5e2509f760397c59493f7f913b4f6897681ed769b868c5af3e58   docker_manage                                              "super
visord --nodaemon --configuration /etc/supervisord.conf"                                 10 minutes ago      Up 10 minutes              0.0.
0.0:8080->80/tcp, 0.0.0.0:44301->443/tcp  manage
064927d586ccbe2866a84674d16e456c063ffc4340c3a47820f58c33be148e7e   mysql:latest                                                       "docker-entrypoint.sh mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci"   10 minutes ago      Exited (1) 9 minutes ago       
                                           report-db
0c7225cced3dbd7933b05d305db16b4a6b269513af7024241df7717d62c4d001   mysql:latest                                                       "docker-entrypoint.sh mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci"   19 hours ago        Up 18 hours                0.0.
0.0:33061->3306/tcp                        master-db
2d9e63e72f82bb1c3038c78e3ff06e1bc4f61cea03efe921de78bdb18b86a013   mysql:latest                                                       "docker-entrypoint.sh mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci"   19 hours ago        Up 18 hours                0.0.
0.0:33062->3306/tcp                        log-db
```
no-truncつけると全部観れるらしいので打ってみる

「docker-entrypoint.sh mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci」

これか！！

打ってみる！！

```
root@2f20666de408:/# docker-entrypoint.sh mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci

2017-05-09T02:20:00.706834Z 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
2017-05-09T02:20:00.714782Z 0 [ERROR] InnoDB: mmap(68714496 bytes) failed; errno 12
2017-05-09T02:20:00.716305Z 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2017-05-09T02:20:00.736563Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2017-05-09T02:20:00.747111Z 0 [ERROR] Plugin 'InnoDB' init function returned error.
2017-05-09T02:20:00.747283Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2017-05-09T02:20:00.747327Z 0 [ERROR] Failed to initialize plugins.
2017-05-09T02:20:00.747403Z 0 [ERROR] Aborting
```

ついにmemory確保できていないぽい！！
一番安いmemory1Gのマシンだから3つもmysql立ち上げられないのかそりゃという感じの悲しい気持ちになりましたがとりあえず理由はわかったので
innodb_buffer_pool_sizeを下げようというケチな方向に

調べたら
https://github.com/docker-library/mariadb/issues/65

mariadbのだけどmysqld --innodb-buffer-pool-size=256M
てつければいいとあったので
とりあえず
mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci --innodb-buffer-pool-size=64M
に変更！！


無事起動はできました。


結論お金は正義です。