指南/如何停止Docker容器
如何在Mac上停止Docker容器,一個或全部
簡短回答
若要停止一個Docker容器,請執行docker stop並加上它的名稱或ID;docker ps會列出它們。若要停止所有執行中的容器,請執行docker stop $(docker ps -q)。在Compose專案中,docker compose stop會停止它的容器,docker compose down還會移除它們。docker stop會請容器關閉,10秒後強制關閉。會自己回來的容器設有重新啟動原則;請用docker update --restart=no將它關閉。Vitals是一款Mac系統監控工具,能從選單列停止容器:它的「容器」列表會顯示每個容器的記憶體,詢問後按一下即可停止。
如何從「終端機」停止Docker容器
- 01 執行
docker ps,列出執行中的容器及其名稱和ID。 - 02 用
docker stop加上名稱停止一個容器,例如docker stop web-1。一個指令中可以指定多個。 - 03 用
docker stop $(docker ps -q)停止所有執行中的容器。docker ps -q只會列出ID,而docker stop會接收所有ID。 - 04 若是Compose專案,請在它的檔案夾中執行
docker compose stop停止它的服務,或執行docker compose down停止服務並移除容器和專案的網路。除非加上-v,否則磁碟區會保留。 - 05 再執行一次
docker ps。仍在列表中的容器還在關閉中,而過一會兒又回來的容器則設有重新啟動原則。
當docker指令指向OrbStack、Colima和Rancher Desktop時,同樣的指令也適用。Podman有podman stop,podman stop -a會停止所有容器。
停止容器會結束它的程序,並保留其他一切:它的檔案、設定和磁碟區,隨時可以用docker start再次啟動。因此,要從沒在使用的容器拿回記憶體和CPU,這是安全的做法。下表將它與大家常一併想到的指令做比較。
docker stop、kill、pause、rm與compose down
| 指令 | 作用 | 適用時機 |
|---|---|---|
| docker stop | 傳送SIGTERM,10秒後傳送SIGKILL | 幾乎任何時候:App能寫完資料並關閉連線 |
| docker kill | 立即傳送SIGKILL | 容器不理會docker stop |
| docker pause | 凍結程序,程序會保留各自的記憶體 | 你想暫時拿回CPU,而不是記憶體 |
| docker rm | 移除已停止的容器,或加上-f移除執行中的容器 | 你已經不需要它了;具名磁碟區會保留 |
| docker compose stop | 停止專案的容器並保留它們 | 你很快會再啟動同一個專案 |
| docker compose down | 停止並移除容器和網路 | 你想下次從頭開始;加上-v也會移除磁碟區 |
為什麼已停止的容器又啟動了
設有重新啟動原則的容器會被Docker再次啟動。使用always時,你停止的容器會在下次Docker Desktop啟動時回來,所以昨天停止的容器在重新開機後又在執行了。使用unless-stopped時,你停止的容器會維持停止。Compose檔案常會為資料庫和快取設定restart: always。
若要查看容器的原則,請執行docker inspect --format '{{.HostConfig.RestartPolicy.Name}}'並加上它的名稱。若要關閉原則,請執行docker update --restart=no加上名稱,或更改Compose檔案中的restart:。
docker stop何時要等10秒
docker stop傳送SIGTERM後,會等待容器的主要程序結束。不理會這個訊號的程序(通常是沒有把訊號傳下去的shell指令碼)會讓停止作業拖滿10秒,直到Docker強制終止它。docker stop -t 2可以縮短等待時間。修正映像檔就能讓它立即停止:在entrypoint指令碼中用exec啟動App,或在Compose中為該服務設定init: true。
停止容器,並拿回記憶體
在Mac上,容器會在同一台Linux虛擬機器裡執行。停止容器會釋放它們在虛擬機器內的記憶體,但虛擬機器可能仍佔著這些記憶體,所以活動監視器中的Virtual Machine Service for Docker可能依然很大。Resource Saver或結束Docker Desktop,才會把記憶體還給macOS;相關設定請參閱Docker使用太多記憶體。
不用「終端機」停止容器
Docker Desktop的Containers顯示方式中,每個容器和每個Compose專案都有Stop按鈕。它在Docker Desktop的視窗裡,所以你得打開App才能使用。像Captain這類選單列App,會在選單列圖像下列出容器,每個都能啟動和停止。Vitals在它的選單列中也能做到,還加上它們都沒有顯示的資訊:每個容器使用多少記憶體和CPU,讓你知道該停止哪一個。
Vitals多了什麼
Vitals能從Mac的選單列停止容器,記憶體用量一目了然。
- 下拉面板中的「容器」列表:每個執行中的容器,附上它的Compose專案、映像檔和一條記憶體長條
- 將指標移到其中一個上方,按一下出現的×。該列會先詢問,再像
docker stop一樣停止它,給它10秒關閉 - 在視窗的「容器」標籤頁中,選取多個後按住Control鍵並按一下,即可一起停止;或按住Control鍵並按一下某個Compose專案,選擇「全部停止」
- 每個容器的記憶體、CPU、網路、磁碟和已發佈的連接埠,支援Docker Desktop、OrbStack、Colima、Rancher Desktop和Podman
小提醒
- Vitals在停止任何東西之前都會先詢問,而且從不啟動、移除或更改容器。
- 設有重新啟動原則的容器,可能會被它的引擎再次啟動。視窗在詢問時會說明這點。
- 如果引擎拒絕或沒有回應,該列會顯示容器仍在執行。
- 有引擎在執行時,就會出現「容器」列表。
大家常問的問題
如何一次停止所有Docker容器?
執行docker stop $(docker ps -q)。它會列出所有執行中容器的ID,並逐一停止。在Vitals中,請在「容器」標籤頁中選取它們,再按住Control鍵並按一下,即可一起停止。
docker stop和docker kill有什麼差別?
docker stop會傳送SIGTERM,最多等待10秒,再用SIGKILL強制停止容器。docker kill會立即傳送SIGKILL,所以App沒有機會寫完資料或關閉連線。
docker compose stop和down有什麼差別?
docker compose stop會停止容器並保留它們,隨時可以用docker compose start再次啟動。docker compose down會停止它們,並移除容器和專案的網路;除非加上-v,否則磁碟區會保留。
為什麼我停止Docker容器後它又啟動了?
它的重新啟動原則是always,所以Docker Desktop啟動時,Docker會再次啟動它。請執行docker update --restart=no加上它的名稱,或更改Compose檔案中的restart:。
停止容器會刪除它的資料嗎?
不會。已停止的容器會保留它的檔案和磁碟區,docker start可以再次執行它。docker rm會移除容器;具名磁碟區會一直保留,直到你移除為止。
可以從Mac選單列停止Docker容器嗎?
可以,用Vitals就行。它的選單列下拉面板會列出執行中的容器及其記憶體,詢問後按一下即可停止容器。它支援Docker Desktop、OrbStack、Colima、Rancher Desktop和Podman。
詞彙表中的相關條目
更多指南
- Mac為什麼這麼慢
- 是什麼在消耗Mac的電池
- 哪個App在使用我的CPU或記憶體
- Mac為什麼無法睡眠
- Chrome占用太多記憶體
- 為什麼Mac的風扇這麼吵
- 如何控制Mac的風扇轉速
- 如何釋放Mac的RAM
- Docker使用太多記憶體
- Mac音量混音器
- Cursor使用大量CPU
- Claude Code使用太多記憶體
- Claude Code和Codex的用量上限
- Claude App佔用大量CPU
- Codex佔用大量CPU
- Ollama佔用過多記憶體
- 活動監視器替代方案
- iStat Menus替代方案
- Stats替代方案
- Mac版工作管理員
- 最佳Mac系統監控工具
- 最佳Mac選單列監控工具
- 最佳Mac音量混音器
- Mac上的htop
- Mac版Process Explorer
- 最好的Mac溫度監控工具