はじめに
Dockerコンテナの状態についてまとめてみました。
間違いなどがあればコメントいただけますと幸いです。
コンテナの状態
docker container ls (docker ps)
の--filter
オプションでフィルタリングできるコンテナ状態としてドキュメントに明記されています。
https://docs.docker.com/reference/cli/docker/container/ls/
状態 | 説明 |
---|---|
created | 一度も起動されていないが作成された状態 |
running |
docker start やdocker run などで開始された状態 |
paused | プロセスが一時停止された状態、再開することができる |
exited | コンテナ内部のプロセスが完了した、またはdocker stop によって停止された状態 |
restarting | 停止状態から再起動している状態 |
removing |
docker rm によって削除されている状態 |
dead | 何かしらの原因で機能しなくなった状態 再起動はできず、削除するしかない |
コマンドと状態遷移
コンテナの状態を操作するコマンドの紹介です。
以下の図中のコマンドはすべてエイリアスとなっています。
例えば、docker create
はdocker container create
の別表記です。
他のコマンドについてもcontainer
を省略した書き方ですが、どちらでも正常に動作します。
実践
create
STATUS
がCreated
となっています。
作成されて、起動は一度もされていない状態です。
$ docker create nginx
$ docker ps -f status=created
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44306d5a9d2f nginx "/docker-entrypoint.…" About a minute ago Created loving_bassi
start
コンテナを起動します。
STATUS
はUp
となっています。
$ docker start 44306d5a9d2f
$ docker ps -f status=running
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44306d5a9d2f nginx "/docker-entrypoint.…" 2 minutes ago Up 37 seconds 80/tcp loving_bassi
pause / unpause
コンテナを一時停止します。
STATUS
はUp
の後に(Paused)
と表示されています。
$ docker pause 44306d5a9d2f
$ docker ps -f status=paused
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44306d5a9d2f nginx "/docker-entrypoint.…" 3 minutes ago Up About a minute (Paused) 80/tcp loving_bassi
一時停止を終了します。
running
状態に戻りました。
$ docker unpause 44306d5a9d2f
$ docker ps -f status=running
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44306d5a9d2f nginx "/docker-entrypoint.…" 3 minutes ago Up About a minute 80/tcp loving_bassi
stop / restart
停止された時のSTATUS
はExited
です。
$ docker stop 44306d5a9d2f
$ docker ps -f status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44306d5a9d2f nginx "/docker-entrypoint.…" 3 minutes ago Exited (0) 6 seconds ago loving_bassi
$ docker restart 44306d5a9d2f
$ docker ps -f status=running
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44306d5a9d2f nginx "/docker-entrypoint.…" 4 minutes ago Up 2 seconds 80/tcp loving_bassi
rm
$ docker stop 44306d5a9d2f
$ docker rm 44306d5a9d2f
エラーになるパターン
停止中コンテナの一時停止を試みる
pause
はrunning
状態以外のコンテナに対しては使用できません。
$ docker ps -f status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44306d5a9d2f nginx "/docker-entrypoint.…" 5 minutes ago Exited (0) 6 seconds ago loving_bassi
$ docker pause 44306d5a9d2f
Error response from daemon: container 44306d5a9d2fb50cc6d767661761134f3ed6c8ea790aa4c69ef2923c0647ad0f is not running
起動中コンテナの削除を試みる
基本的にはコンテナを停止してから削除します。
起動中や一時停止中のコンテナを削除しようとするとエラーが発生します。
-f
オプションをつけて強制的に削除する方法もありますが、誤操作防止のためにおすすめはしません。
$ docker ps -f status=running
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44306d5a9d2f nginx "/docker-entrypoint.…" 5 minutes ago Up 40 seconds 80/tcp loving_bassi
$ docker rm 44306d5a9d2f
Error response from daemon: cannot remove container "/loving_bassi": container is running: stop the container before removing or force remove
おわりに
最後までご覧いただきありがとうございました。
参考になったという方はアクションをいただけますと励みになります!