我有一个来自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 aux
和kill
等命令来查找和管理同一进程的不同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的两位“高管”。
那么,我希望这可以帮助别人!