我启动一个名为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
看到调试条目!
发生了什么事?
答案 0 :(得分:0)
Docker将容器与主机隔离,它不会将主机与容器隔离。这意味着主机可以看到进程在容器内运行,但是从不同的名称空间中,因此pid将是不同的。
附加到控制台似乎是来自bashdb的东西。它有自动检测tty以指示输出,并且可能会被Docker隔离抛出。