2015-11-20 31 views
4

我不明白,在泊坞窗:不同的PID为`top`和`ps`

$> docker top lamp-test 
PID     USER    COMMAND 
31263    root    {supervisord} /usr/bin/python /usr/bin/supervisord -n 
31696    root    {mysqld_safe} /bin/sh /usr/bin/mysqld_safe 
31697    root    apache2 -D FOREGROUND 
... 

$> docker exec lamp-test ps 
PID TTY   TIME CMD 
    1 ?  00:00:00 supervisord 
433 ?  00:00:00 mysqld_safe 
434 ?  00:00:00 apache2 
831 ?  00:00:00 ps 

那么的不同,问题是,为什么是PID不同?我会说ps的输出是命名空间,但如果这是真的,top显示的是什么!

回答

4

docker exec lamp-test ps显示pids码头集装箱内。

docker top lamp-test显示主机系统pids

你可以看到一个容器进程,但你不能杀死它们。这种“有缺陷”的隔离实际上具有一些很大的好处,比如能够监视在主机上运行的单个monitor进程中的所有容器内运行的进程。

+0

那么这意味着容器内的进程在主机上也有一个PID,为什么?我认为这些过程运行在某种虚拟环境中,不能从外部看到。现在我可以从外面杀掉这些进程了吗? –

+2

Docker不是虚拟机。这是一种'chroot'(LXC)。主机可以看到容器进程,但容器进程看不到主机进程。基本隔离。 –

+0

当我试图杀死这样的进程'kill 31696'时,我得到了'kill:31696:没有这样的进程'那么为什么我必须做'docker exec lamp-test kill 433'? –