進入容器交互終端
使用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 ~]#