事象
コンテナイメージを利用してコンテナをrunした際に即時でコンテナ終了がする。
原因
docker run -ti
でコンテナを作成していない
以下、補足です。
補足
まずは基礎知識としてdocker startはコンテナの起動を意味し、docker runは新規コンテナの立ち上げです。
start : Start a container run : Run a command in a new container
要はコンテナを作成+起動を行うのがrunコマンドで、同コマンドには多くの引数が存在します。
# man docker-run
オプションはアルファベット順の頭をいくつか挙げても以下で収まりませんが
attach,add-host,blkio-weight,blkio-weight-device,cap-add,cap-drop,cgroup-par‐ent,cidfile,cpu-count,cpu-percent,cpu-period...
その中でも必須級によく使うオプションは -t と -i です。
このオプションにより、標準入力(stdin)を接続したままとなるのでコンテナ内を操作できます。逆に一度きりの実行であれば不要です。
試しに-ti
オプションを付けた場合の挙動は以下。
# docker run -ti ubuntu root@790db5d9f507:/# exit exit # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 790db5d9f507 ubuntu "/bin/bash" XX seconds ago Exited (0) XX seconds ago kind_feynman # docker start 790db5d9f507 790db5d9f507 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 790db5d9f507 ubuntu "/bin/bash" XX seconds ago Up X second kind_feynman
確かにSTATUSがUpしています。
逆に-ti
オプションを付けない場合は以下。
# docker run ubuntu # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2b5746559edb ubuntu "/bin/bash" XX seconds ago Exited (0) XX seconds ago kind_clarke # docker start 2b5746559edb 2b5746559edb # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2b5746559edb ubuntu "/bin/bash" XX seconds ago Exited (0) XX seconds ago kind_feynman
STATUSがUpしていません。
まとめると、コンテナを一度きりのコマンド発行ではなく好き放題にコマンドを打つための環境として利用したい場合は同オプションが必要となります。ご注意ください。