有困難停止 Docker 容器嗎? 找到正確的方法來停止容器在能夠創建許多不同容器的情況下是困難的。 在本文中,您將學習到停止容器或所有容器的 Docker 命令。
繼續閱讀以了解更多!
先決條件
要按照本教程進行操作,請確保您具備以下條件:
- Windows 10 – 本教程使用 Windows 運行 Docker,但您也可以將相同的一般步驟應用於 Linux 或 macOS。
- Docker Desktop – 本教程使用版本 3.5.2。 如果您使用的是 Linux,則可用 Docker 引擎,因為 GUI 不可用。
- A running Docker container or containers.
使用 docker stop Containers 命令結束容器
讓我們從第一個命令開始:docker stop 容器命令以及它如何完成停止容器的任務。
例如,也許您需要停止名為 mystifying_hofstadter
且 ID 為 fb66ed502096
的正在運行的容器。 如下例所示,使用 docker stop
容器命令停止容器。

如果您有多個運行中的容器,並且希望停止它們,則docker stop
容器命令支持逐個停止多個容器ID。
首先,通過docker ps
命令列出所有容器,並將容器ID傳遞給docker stop
容器命令,如下所示。

如果您希望停止所有運行中的容器,而無需手動檢索容器ID並將其傳遞給docker stop
,則docker ps -q
命令將完成此操作。

上述的
$(docker ps -q)
構造在Linux上的Bash和Windows上的PowerShell中都是子表達式。子表達式指示shell先處理一組命令docker ps -q
,然後將結果返回給原始命令docker stop
。
docker stop
容器命令使用SIGTERM信號。Linux信號向進程通知事件,但進程決定如何對給定的信號做出反應。
使用SIGTERM信號時,Docker使用該信號優雅地停止進程,等待默認的10
秒鐘,然後發送SIGKILL信號,立即終止進程。
使用進程信號停止容器
您了解到在停止容器時,使用docker stop
容器命令時,Docker的默認行為(停止信號)。但您可能不希望使用默認行為,而是指示Docker使用替代的停止信號。
使用docker run
命令的--stop-signal
標誌,您可以在啟動容器時指定停止信號。該標誌設置當您希望停止容器時將發送給運行中容器的信號。
在下面的示例中,--stop-signal
標誌採用SIGQUIT
值,這告訴Docker在停止容器時發送SIGQUIT信號。該示例還使用以下參數:
d
– Runs the container in detached (background) mode. The detached mode will not allow the container to be immediately interacted with by the user since the process is running in the background.t
– allocates a Pseudo-TTY (PTY) console, which emulates a real terminal console in the container and stops the Ubuntu container from immediately exiting. The Ubuntu container in the example requires a PTY console to stay active in the background.- “映像名稱” – 從哪個Docker映像提供容器,本例中為
ubuntu
映像。

SIGQUIT
as the signal when starting and then stopping a Docker container. 您還可以使用Dockerfile指定停止信號,這告訴Docker如何構建容器。您可以向Dockerfile添加一個條目,並使用
STOPSIGNAL SIGQUIT
指定停止信號,例如。您可以將SIGQUIT
替換為您想要的任何停止信號。
使用docker kill
立即退出容器
有時您會希望立即退出容器而不允許它們有寬限期。 docker kill
命令立即停止容器。
下面的示例將帶有ID 2aa318273db5
的容器傳遞給docker kill
。容器將立即通過SIGKILL信號退出。容器將不被允許優雅退出。由於該命令,容器將退出,並顯示容器的ID。
使用命令
docker kill $(docker ps -q)
殺死所有容器。注意,(docker ps -q
)在這裡是一個子表達式。
使用docker rm
停止並刪除容器
默認情況下,當您創建一個容器時,該容器與以前的容器相同:它是幂等的。刪除容器的影響很小,因此 docker rm
命令可以強制停止並刪除容器。Docker 向主進程發送 SIGKILL
信號,並將容器從可用容器列表中刪除。
如果容器必須保留更改過的內部文件或者需要保留其狀態,那麼刪除容器將破壞這些更改。請小心潛在的錯誤!
在下面的示例中,您可能已經啟動了一個名為 kind_galileo
的容器。在刪除容器之前,容器必須停止,如下所示。 docker ps -a
命令顯示示例容器的狀態為 Exited
。

現在容器已經停止,發出 docker rm
命令將完全刪除容器。
不需要先停止容器再刪除容器,使用 --force
和 docker rm
的組合將在一個操作中停止並刪除容器。容器 laughing_elion
將無法運行。
如果不指定
--force
命令,您將遇到錯誤消息Error response from daemon: You cannot remove a running container...

使用 Docker Compose 停止 Docker 容器
Docker 命令通常用于单个容器,但您可以创建一个由多个容器协同工作的服务。Docker Compose 工具允许您配置由多个容器组成的服务以协同工作。
由于服务中的容器是设计为协同工作的,最好优雅地停止整个服务,而不是任何单个容器。
如果您正在运行一个包含多个容器的服务,[docker-compose stop]
命令将停止服务,但不会删除容器或服务。请按照下面的步骤创建一个 Docker Compose 服务,启动该服务,并最终优雅地停止该服务。
1. 创建一个目录来存储您的配置文件。在这个示例中,目录 C:\Articles\Ubuntu 将存储该文件。
2. 接下来,创建名为 docker-compose.yml 的文件,其中包含以下配置。下面的 Docker Compose 文件创建了一个包含两个 Ubuntu 容器的服务,并且当启动时,容器不会立即退出。
3. 在終端會話中,導航到您的自定義 Docker 配置文件目錄,本例中為C:\Articles\Ubuntu。執行docker-compose up -d
命令,在後台生成並啟動在前一步中創建的服務,如-d
選項所示。

4. 在相同的終端會話和目錄中,發出命令docker-compose stop
以優雅地結束服務和容器。

像
docker
命令一樣,docker-compose
命令也有rm --force
和kill
參數。這些docker-compose
參數作用於服務而不是單個容器。docker-compose kill
命令還接受一個-s
選項來指定停止信號。
結論
Docker 容器是一個強大的工具,用於創建開發和生產使用的獨特和分段的環境。在本文中,您學到了幾種 Docker 停止一個或多個,甚至所有容器的方法。您還了解了 Docker 使用的默認停止信號以及如何更改它。
有了這些知識,您現在了解了停止 Docker 容器的各種細節,以及在停止運行容器時如何不出錯。有了這些新發現的知識,您打算如何停止您的容器?
Source:
https://adamtheautomator.com/docker-stop-containers/