如何杀死容器内的进程? Docker顶层命令

我有一个来自Docker官方网站的简单例子。

我运行以下:

sudo docker run -d ubuntu:latest /bin/sh -c "while true; do echo hello world; sleep 1; done" a66asdasdhqie123... 

然后从创build的容器中取出一些输出:

 sudo docker logs a66 hello hello hello ... 

然后我查找一个容器的运行过程:

 sudo docker top a66 UID PID PPID C STIME TTY TIME CMD root 25055 15152 0 20:07 ? 00:00:00 /bin/sh -c while true; do echo hello world; sleep 1; done root 25295 25055 0 20:10 ? 00:00:00 sleep 1 

接下来我尝试杀掉容器的第一个进程

 sudo docker exec a66 kill -9 25055 

但是,我没有做任何改变。 过程仍然有效,每秒输出“hello”。 我错了什么?

当我重现你的情况时,我看到docker top <container>docker exec -it <container> ps -aux之间的不同PID。 当你做docker exec的时候,命令在container中执行=>应该使用容器的pid。 否则,你可以在没有sudo kill -9 25055情况下直接从主机上执行kill,在你的情况下: sudo kill -9 25055

检查这个:

 ps | grep -i a66 | tr -s ' '|cut -f2 -d' '| { while read line; do kill -9 $line; done } 

通过执行从每个管道的左侧到末端的命令来了解这个开始(|)

更简单的选项:

 kill $(pidof a66) 

花了我一段时间找到正确的答案,但你将不得不从容器内管理这个过程。 当你从主机运行docker top a66 ,PID是来自你的主机,但是如果使用Cygwin则不是这种情况。 无论如何,您需要将bash或什么东西放回到容器中,并在容器中使用ps auxkill等命令来查找和管理同一进程的不同PID。

我正在寻找这样的东西,但我找不到,然后我这样做:

[root @ notebook〜]#docker exec -it tadeu_debian ps aux | grep ping | awk'{print $ 2}'| xargs -I {} docker exec -i tadeu_debian kill -9

这是来自Docker e xargs的两位“高管”。

那么,我希望这可以帮助别人!