Dockerは、開発やテスト環境、本番運用など幅広い用途で活用されているコンテナ型の仮想化ツールです。Dockerを使う中で、コンテナを一時的に停止したい場面はよくあります。そんなときに便利なのが「docker stop
」コマンドです。
この記事では、「docker stop」の基本的な使い方から、関連するオプション、注意点、docker kill
との違いまでを丁寧に解説します。これからDockerを学び始めた方にも分かりやすく紹介していますので、ぜひ参考にしてください。
docker stop
は、実行中のコンテナを停止するためのコマンドです。このコマンドは、対象となるコンテナに対して**SIGTERM(終了シグナル)**を送り、一定の猶予時間のあと、**SIGKILL(強制終了)**で停止させます。
このプロセスは、コンテナ内で動作しているアプリケーションに終了準備の時間を与えるため、安全に停止できるという特徴があります。
構文はとてもシンプルです。
docker stop [OPTIONS] CONTAINER [CONTAINER...]
たとえば、my_container
という名前のコンテナを停止するには次のように入力します。
docker stop my_container
複数のコンテナを同時に停止したい場合は、名前をスペースで区切って指定します。
docker stop web_server db_server cache_server
コンテナの名前ではなく、コンテナIDでも指定できます。以下のように使います。
docker stop 4e5f6c7d89a0
完全なIDでなくても、他と区別できる範囲であれば先頭数文字でも認識されます。
停止したいコンテナが現在動作中かどうかを確認するには、次のコマンドを使います。
docker ps
出力結果には、コンテナのID・名前・ステータスなどが表示されます。これをもとに正確な対象を特定できます。
docker stop
にはオプションとしてタイムアウト秒数を指定することができます。デフォルトでは10秒ですが、-t
オプションで任意の秒数に変更可能です。
docker stop -t 30 my_container
この例では、SIGTERM送信後に30秒待ってからSIGKILLが送られます。プロセスがクリーンに終了するのを待ちたいときに便利です。
よく比較されるのが docker kill
コマンドです。両者の違いは停止方法の丁寧さにあります。
コマンド | 動作内容 |
---|---|
docker stop | SIGTERM →(待機)→ SIGKILL |
docker kill | 即座にSIGKILL |
docker stop
はプロセスに「終了準備してね」と伝えたうえで猶予を与えるのに対し、docker kill
は問答無用で強制終了するため、処理中のデータが失われるリスクがあります。基本的にはdocker stop
を使う方が安全です。
このエラーは、指定したコンテナ名やIDが存在しない場合に出ます。スペルミスや、すでに停止済みの可能性があるので、docker ps -a
で再確認しましょう。
このエラーは、Dockerをsudoなしで実行していて権限が足りない場合に発生します。次のようにsudoを付けて再試行します。
sudo docker stop my_container
もしくは、ユーザーをdockerグループに追加して再ログインすると、sudoなしでも利用可能になります。
複数のコンテナをまとめて停止したい場合、スクリプトで自動化することも可能です。例えば、起動中のすべてのコンテナを停止したいときは以下のように記述します。
docker stop $(docker ps -q)
このワンライナーは、まず docker ps -q
で起動中のコンテナIDを一覧表示し、それらを docker stop
に渡してすべて停止します。
はい、コンテナの停止は削除ではありません。docker stop
を実行しても、ボリュームやログ、設定はそのまま残ります。再度 docker start
を使えば、同じ状態からコンテナを再起動できます。
停止後、確認したい場合は以下のコマンドを実行します。
docker ps -a
ステータス欄に Exited
と表示されていれば、正常に停止されています。
docker logs [コンテナ名]
)-t
秒数を確保docker inspect
で状態チェックdocker stop
コマンドは、Dockerコンテナを安全かつ丁寧に停止するための基本かつ重要なコマンドです。
-t
オプションでタイムアウト調整が可能docker kill
は緊急用、基本はstop
推奨コンテナの管理に慣れていくためにも、docker stop
の使い方をしっかりマスターしておくことが、スムーズなDockerライフへの第一歩になります。