0

我启动了一个名为 pg 的容器。我想在容器中调试一个 bash 脚本,所以我在容器中安装了 bashdb。我开始了:

root@f8693085f270:/# /usr/share/bin/bashdb docker-entrypoint.sh postgres

我回到主机,然后:

[eric@almond volume]$ docker exec -ti pg bash
root@f8693085f270:/# ps ajxw
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    0     1     1     1 ?         3746 Ss       0   0:00 bash
    1  3746  3746     1 console   3746 S+       0   0:00 /bin/bash 

[eric@almond postgres]$ ps ajxw | grep docker
30613  3702  3702 30613 pts/36    3702 Sl+   1000   0:01 docker run --name pg -v /home/eric/tmp/bashdb:/bashdb -it postgres bash
 3760  8049  8049  3760 pts/19    8049 S+       0   0:00 /bin/bash /usr/share/bin/bashdb docker-entrypoint.sh postgres
 4166  8294  8294  4166 pts/9     8294 Sl+   1000   0:00 docker exec -ti pg bash

所以在容器中我看到了一个 TTY 条目console,这是我以前从未见过的,我在ps主机上看到了调试条目!

到底是怎么回事?

4

1 回答 1

0

Docker 将容器与主机隔离,它不会将主机与容器隔离。这意味着主机可以看到进程在容器内运行,尽管来自不同的名称空间,因此 pid 会有所不同。

附加到控制台似乎是来自 bashdb 的东西。它具有自动检测 tty 以将输出定向到的功能,并且可能会被 Docker 隔离所抛弃。

于 2016-08-10T14:21:00.397 回答