Docker杀死容器内的进程

5
我使用 docker exec -it container-name bash 命令进入 Docker 容器。在容器内部,我运行命令 ps aux | grep processName 并得到一个 PID,然后我运行 kill processId 命令,但是却得到这个错误信息:-bash: kill: (21456) - No such process。我是否漏掉了什么?我知道 Docker 在主机的 top 命令和容器内部的 ps aux 命令中显示的进程 ID 不同(参见How to kill process inside container? Docker top command),但是我是从容器内部运行此命令的。
1个回答

6

这个响应是因为你试图杀死的进程在杀死它的时候不存在。例如,如果你运行ps aux,你可以在容器内得到这样一个输出(当然这取决于容器):

oot@69fbbc0ff80d:/# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  18400  3424 pts/0    Ss   13:55   0:00 bash
root        15  0.0  0.0  36840  2904 pts/0    R+   13:57   0:00 ps aux

如果您尝试使用PID 15终止进程,则会出现错误,因为在尝试终止进程时PID 15已经完成。 ps命令在显示进程信息后终止。所以:

root@69fbbc0ff80d:/# kill 15
bash: kill: (15) - No such process

在Docker容器中,您可以像普通情况下一样杀死进程,但除了根进程(ID为1)之外。 您无法终止它:
root@69fbbc0ff80d:/# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  18400  3424 pts/0    Ss   13:55   0:00 bash
root        16  0.0  0.0  36840  2952 pts/0    R+   13:59   0:00 ps aux
root@69fbbc0ff80d:/# kill 1
root@69fbbc0ff80d:/# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  18400  3424 pts/0    Ss   13:55   0:00 bash
root        17  0.0  0.0  36840  2916 pts/0    R+   13:59   0:00 ps aux

正如您所看到的,您无法终止它。但是,如果您想证明您可以杀死进程,您可以执行以下操作:

root@69fbbc0ff80d:/# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  18400  3424 pts/0    Ss   13:55   0:00 bash
root        18  0.0  0.0  36840  3064 pts/0    R+   14:01   0:00 ps aux
root@69fbbc0ff80d:/# sleep 1000 &
[1] 19
root@69fbbc0ff80d:/# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  18400  3424 pts/0    Ss   13:55   0:00 bash
root        19  0.0  0.0   4372   724 pts/0    S    14:01   0:00 sleep 1000
root        20  0.0  0.0  36840  3016 pts/0    R+   14:01   0:00 ps aux
root@69fbbc0ff80d:/# kill 19
root@69fbbc0ff80d:/# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  18400  3424 pts/0    Ss   13:55   0:00 bash
root        21  0.0  0.0  36840  2824 pts/0    R+   14:01   0:00 ps aux
[1]+  Terminated              sleep 1000

希望这有所帮助。

{btsdaf} - Maksim Luzik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接