目次

docker stop・start・restart・kill コマンド:コンテナの停止と再起動

docker stop、start、restart、kill、pause、unpause はコンテナの実行状態を制御します。コンテナのライフサイクル全体については、コンテナのライフサイクルを参照してください。

構文

docker stop [オプション] コンテナ [コンテナ...]
docker start [オプション] コンテナ [コンテナ...]
docker restart [オプション] コンテナ [コンテナ...]
docker kill [オプション] コンテナ [コンテナ...]
docker pause コンテナ [コンテナ...]
docker unpause コンテナ [コンテナ...]

オプション

コマンドオプション説明
docker stop-s, --signal stringコンテナに送信するシグナル
docker stop-t, --timeout int指定した秒数だけ待ってからコンテナを強制終了する
docker start-a, --attachコンテナの STDOUT/STDERR に接続し、シグナルを転送する
docker start--checkpoint string指定した checkpoint から復元する
docker start--checkpoint-dir stringカスタムの checkpoint 保存ディレクトリを使用する
docker start--detach-keys string接続状態を終了するキーの組み合わせを上書きする
docker start-i, --interactiveコンテナの STDIN に接続する
docker restart-s, --signal stringコンテナに送信するシグナル
docker restart-t, --timeout int指定した秒数だけ待ってからコンテナを強制終了する
docker kill-s, --signal stringコンテナに送信するシグナル

pause と unpause の説明には、ほかのオプションは記載されていません。stop、start、restart、kill、pause は docker container サブコマンド形式でも実行できます。

例

stop の待機時間と終了状態

$ time docker stop web
web
real	0m 0.50s
user	0m 0.00s
sys	0m 0.01s

$ time docker stop sleeper
sleeper
real	0m 10.44s
user	0m 0.01s
sys	0m 0.01s

$ docker ps -a --format 'table {{.Names}}\t{{.Status}}'
NAMES        STATUS
sleeper      Exited (137) 1 second ago
web          Exited (0) 12 seconds ago
uses-redis   Up 51 seconds
registry     Up About a minute
  • web は 0.50 秒後に停止し、状態は Exited (0) です。nginx は SIGTERM を受け取ると正常に終了します。
  • sleeper は 10.44 秒待機し、状態は Exited (137) です。コンテナ内の PID 1 である sleep は SIGTERM を処理しません。Docker は既定の 10 秒間待機した後、SIGKILL を送信します(137 = 128 + 9)。PID 1 について詳しくは、コンテナのライフサイクルを参照してください。
  • docker stop --help の -t, --timeout を使うと、コンテナを強制終了するまでの待機秒数を設定できます。この例では、既定の待機時間後に強制終了される様子を示しています。
  • docker ps -a は停止中のコンテナを表示します。uses-redis と registry は引き続き実行中です。

start、restart、kill

$ docker start web
web

$ docker restart -t 2 web
web

$ docker kill sleeper
Error response from daemon: cannot kill container: sleeper: container ebcd31ea947204593383614f0fa2b0b9baba719e4858042e8120b3d544468f20 is not running

$ docker start sleeper && docker kill sleeper
sleeper
sleeper

$ docker ps -a --format 'table {{.Names}}\t{{.Status}}'
NAMES        STATUS
sleeper      Exited (137) Less than a second ago
web          Up 2 seconds
uses-redis   Up 54 seconds
registry     Up About a minute
  • docker start は停止中の web を起動し、docker restart -t 2 は 2 秒のタイムアウトで再起動します。
  • 停止中のコンテナに対する docker kill sleeper は失敗し、コンテナが実行中ではないというエラーが表示されます。先に start してから kill すると、両方のコマンドが成功します。
  • kill 後、sleeper は Exited (137)、web は Up と表示されます。

pause と unpause

$ docker pause web
web

$ docker ps --format 'table {{.Names}}\t{{.Status}}'
NAMES        STATUS
web          Up 2 seconds (Paused)
uses-redis   Up 55 seconds
registry     Up About a minute

$ docker exec web nginx -v
Error response from daemon: Container web is paused, unpause the container before exec

$ docker unpause web
web
  • docker pause はコンテナ内のすべてのプロセスを一時停止し、状態欄に (Paused) と表示します。
  • 一時停止中は docker exec が失敗し、先に unpause するようエラーメッセージが表示されます。docker unpause で一時停止を解除できます。

シグナルを送信して nginx を再読み込み

$ docker kill -s HUP web
web

$ docker logs --tail 3 web
2026/10/25 15:30:32 [notice] 1#1: signal 17 (SIGCHLD) received from 22
2026/10/25 15:30:32 [notice] 1#1: worker process 22 exited with code 0
2026/10/25 15:30:32 [notice] 1#1: signal 29 (SIGIO) received

$ docker kill -s HUP web2
web2

$ docker logs web2 2>&1 | grep -E 'SIGHUP|reconfiguring'
2026/10/25 15:31:00 [notice] 1#1: signal 1 (SIGHUP) received, reconfiguring
2026/10/25 15:31:00 [notice] 1#1: reconfiguring
  • docker kill -s HUP は指定したシグナルをコンテナに送信します。ここでは web2 のログに、SIGHUP を受信して再読み込み中であることが明確に表示されています。
  • docker logs --tail 3 は直近の 3 行だけを表示します。もう一つの例では stderr を stdout にまとめてから、grep でログを絞り込んでいます。

存在しないコンテナ名

$ docker stop nosuch
Error response from daemon: No such container: nosuch

指定したコンテナ名が存在しない場合、Docker は No such container と応答します。

関連する章

練習問題

練習:コンテナ sleeper は停止しています。起動してすぐに強制終了し、最後にすべてのコンテナの名前と状態を表示してください。

解答
docker start sleeper && docker kill sleeper
docker ps -a --format 'table {{.Names}}\t{{.Status}}'

よくある質問

なぜ docker stop sleeper は約 10 秒かかるのですか?

今回の docker stop sleeper は 10.44 秒かかり、その後の状態は Exited (137) でした。docker stop --help によると、-t, --timeout は指定した秒数だけ待ってからコンテナを強制終了します。

停止中のコンテナに docker kill を使えますか?

いいえ。停止中の sleeper に docker kill を実行すると、Docker はコンテナが実行中ではないと応答します。まず docker start sleeper で起動してから kill してください。

コンテナを pause した後も docker exec を使えますか?

いいえ。この例では docker exec web nginx -v に対して、コンテナが一時停止中だと応答されます。先に docker unpause web を実行してください。

コンテナを停止せずに nginx の設定を再読み込みするにはどうしますか?

コンテナに HUP を送信します:docker kill -s HUP web2。ログには SIGHUP received, reconfiguring と表示されます。

更新日 2026年10月26日