`docker container rm` 和 `docker container kill` 是否有效地实现了相同的功能?

Tim*_*Tim 7 docker

从联机帮助页:

docker container rm将从主机节点中删除一个或多个容器。可以使用容器名称或 ID。这不会删除图像。

docker container kill: 指定的每个容器内的主进程将被发送 SIGKILL,或使用选项 --signal 指定的任何信号。

容器是图像的运行实例吗?那么做 docker container rmdocker container kill有效地实现相同的目标:容器将停止存在?

它们的区别是什么?

什么是“容器内的主要过程”?

容器是否完全作为主机中的进程运行?

谢谢。

Ste*_*ris 10

如果你运行一个容器..

例如

docker run alpine echo hello
Run Code Online (Sandbox Code Playgroud)

后面好像清理了。。。

% docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
Run Code Online (Sandbox Code Playgroud)

但它不是它仍然存在。

% docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
3a4772c0f165        alpine              "echo hello"        22 seconds ago      Exited (0) 20 seconds ago                       relaxed_ramanujan
Run Code Online (Sandbox Code Playgroud)

这可以用rm命令清理

% docker container rm 3a4772c0f165 
3a4772c0f165

% docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
Run Code Online (Sandbox Code Playgroud)

所以:

  • docker kill 将杀死一个容器。
  • docker rm 将清理终止的容器。

它们是不同的东西。

注意:您可以告诉容器自动清理:

% docker run --rm alpine echo hello
hello

% docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
Run Code Online (Sandbox Code Playgroud)

那你就不需要手动了rm


ctr*_*lor 7

容器是(至少):

  • 正在运行的进程
  • 一个临时层,到它的文件系统。
  • 卷和网络映射。

Kill 只会处理第一个。

如果您使用--rm选项运行。然后停止或杀死容器也将删除它。

你不应该使用 kill (除非你必须),docker stop发送 SIGTERM。(如果你必须将 SIGKILL 发送到一个进程,这是行为不端的,需要修复。)