目次
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 と応答します。
関連する章
- コンテナのライフサイクル
- docker ps コマンド:コンテナの状態を確認する
- docker exec コマンド:実行中のコンテナ内でコマンドを実行する
- docker logs コマンド:コンテナのログを確認する
練習問題
練習:コンテナ 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日