Docker - 终端交互

进入容器交互终端

使用docker attach命令进入容器交互终端。
注意:如果多个窗口同时attach到同一个容器,那么所有窗口都会同步显示。如果某个窗口因命令阻塞时,那么其他窗口将无法执行操作。

[root@CentOS-7 ~]# docker images ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu    latest              6a2f32de169d        13 days ago         117.2 MB
[root@CentOS-7 ~]# 
[root@CentOS-7 ~]# docker run --name test -idt ubuntu
6a0e7b067fe3122ad23b34d84653ca0872cda44efff903198f41e76e017e4a26
[root@CentOS-7 ~]# 
[root@CentOS-7 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
6a0e7b067fe3        ubuntu              "/bin/bash"         7 seconds ago       Up 7 seconds                            test
[root@CentOS-7 ~]# 
[root@CentOS-7 ~]# docker attach test
root@6a0e7b067fe3:/# 
root@6a0e7b067fe3:/# exit
exit
[root@CentOS-7 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@CentOS-7 ~]# 

退出容器交互终端

通过Ctrl-p和Ctrl-q键,可以退出正在交互的容器终端,此时容器不会终止。
特别注意:通过exit命令或Ctrl+d键来退出容器终端时,所创建的容器立刻终止。

[root@CentOS-7 ~]# docker run --name test -it ubuntu bash
root@a445204315f3:/# 
root@a445204315f3:/#    # 先后按Ctrl-p和Ctrl-q键
[root@CentOS-7 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a445204315f3        ubuntu              "bash"              36 seconds ago      Up 34 seconds                           test
[root@CentOS-7 ~]# 

使用nsenter工具进入容器交互终端

nsenter启动一个新的shell进程(默认是/bin/bash), 同时会把这个新进程切换到和目标(target)进程相同的命名空间,相当于进入了容器内部。
nsenter包含在util-linux 2.23版本之后,而且运行需要root权限。
特别注意:通过exit命令或Ctrl+d键来退出容器终端时,所创建的容器不会终止。

[root@CentOS-7 ~]# rpm -qa |grep util-linux
util-linux-2.23.2-26.el7.x86_64
[root@CentOS-7 ~]# 
[root@CentOS-7 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a445204315f3        ubuntu              "bash"              2 hours ago         Up 2 hours                              test
[root@CentOS-7 ~]# 
[root@CentOS-7 ~]# PID=$(docker inspect --format "{{ .State.Pid }}" test)
[root@CentOS-7 ~]# 
[root@CentOS-7 ~]# nsenter --target $PID --uts --ipc --net --pid
[root@a445204315f3 ~]# 
[root@a445204315f3 ~]# exit
logout
[root@CentOS-7 ~]# 
[root@CentOS-7 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a445204315f3        ubuntu              "bash"              2 hours ago         Up 2 hours                              test
[root@CentOS-7 ~]# 
posted @ 2017-04-26 21:43  Anliven  阅读(4213)  评论(0编辑  收藏  举报