(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Docker】docker start/runをしてもコンテナの状態がExitedになる

スポンサーリンク

事象

コンテナイメージを利用してコンテナを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していません

まとめると、コンテナを一度きりのコマンド発行ではなく好き放題にコマンドを打つための環境として利用したい場合は同オプションが必要となります。ご注意ください。