目錄
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):sleep是容器裡的 PID 1,沒有處理 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限制顯示最近三行;另一個範例把 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日