Docker は様々な仮想環境を実行できるツールです。Docker はコマンドラインで使用することができ、docker run コマンドはイメージからコマンドを直に実行するために便利なコマンドです。また Docker は仮想環境を定義するイメージから実際に動かすコンテナを作ります。docker run コマンドを実行する際、コンテナは次の状態遷移で動作します(コンテナの状態遷移には図に加えて Paused があります。 Up 9 hours(Paused)の様に表示され、docker unpause でプロセスもそのままに再開できます )。
docker run コマンドはイメージからコンテナを生成し、コンテナにコマンドを実行させます。このため docker run コマンドが完了した後のコンテナの状態は Exited になる様に思えますが、実は違います。これを示すコマンド実行例が次です。
# 成功パターン >docker run --entrypoint="" --name="success" alpine:3.12.0 echo hogehoge # Docker が実行コマンドのファイルを見つけられないパターン >docker run --entrypoint="" --name="not_found_commnad" alpine:3.12.0 hogehoge docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "hogehoge": executable file not found in $PATH: unknown. # シェルが実行コマンドのファイルを見つけられないパターンその1 >docker run --entrypoint="" --name="not_found_commnad_with_sh" alpine:3.12.0 sh hogehoge sh: can't open 'hogehoge': No such file or directory # シェルが実行コマンドのファイルを見つけられないパターンその2 >docker run --entrypoint="sh" --name="not_found_commnad_with_entry_sh" alpine:3.12.0 hogehoge sh: can't open 'hogehoge': No such file or directory # 結果 >docker ps -a --filter ancestor=alpine:3.12.0 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c0ba3f9e03d1 alpine:3.12.0 "sh hogehoge" 5 seconds ago Exited (2) 4 seconds ago not_found_commnad_with_entry_sh 07cbb8bc1188 alpine:3.12.0 "sh hogehoge" 9 seconds ago Exited (2) 9 seconds ago not_found_commnad_with_sh 2ccb9adc7823 alpine:3.12.0 "hogehoge" 13 seconds ago Created not_found_commnad 8aacd014837c alpine:3.12.0 "echo hogehoge" About a minute ago Exited (0) About a minute ago success
Docker 自体がコマンドを実行できない場合、メインプロセスが立ち上がらず、ステータスは Created のままでコンテナは放置されます。このメインプロセスが立ち上がらないパターンは色々ですが、一つが例にある Docker がコンテナ内に実行すべきコマンドを見つけられないパターンです。私的にシェルをエントリーポイントにしているイメージが多い理由の一つがこれだと思います。
具体的なメインプロセスが立ち上がらないパターンですが他にはメモリの問題が考えられます。真に把握するのであればソースコードを追うべきなのですが自分はソースコードを追うのを諦めてしまいました。 Docker のソースコードの次の部分がコンテナを立ち上げてメインプロセスをスタートする部分です。この処理でプロセスがスタートできずエラーが返れば Created でコンテナが放棄されます。
runc/container_linux.go at 98b75befc44c8f0f4a76e7cf8f100be834e624e8 · opencontainers/runc#L332