Docker attach
Docker提供了docker attach的命令,用来让我们进入已经启动的容器(如果容器已经终止,你需要使用docker start将它启动。
命令:docker attach mydocker
nsenter进入容器
nsenter命令被包含在util-linux软件包里面,使用nsenter可以访问另一个进程的名字空间,大多数Linux发行版默认包含了该软件,CentOS默认是有的。如果你的系统里面没有可以使用以下命令进行安装:
Yum安装:
yum install -y util-linux
连接方式如下
:
[root@linux-node1 ~]# PID=$(docker inspect --format "{{ .State.Pid }}" mydocker)
[root@linux-node1 ~]# echo $PID
8029
注意如果你的PID变量为0,说明mydocker容器没有启动
:
连接: sudo nsenter --target $PID --mount --uts --ipc --net --pid
root@1ca64ab83b0e /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:44 pts/0 00:00:00 /bin/bash
root 14 0 0 09:01 ? 00:00:00 -bash
root 27 14 0 09:01 ? 00:00:00 ps -ef
[root@1ca64ab83b0e /]#
[root@1ca64ab83b0e /]#
[root@1ca64ab83b0e /]#
[root@1ca64ab83b0e /]# exit
脚本 docker_in.sh(./docker_in.sh docker_names)
:
#!/bin/bash
#Use nsenter to access docker
docker_in(){
NAME_ID=$1
PID=$(docker inspect --format "{{ .State.Pid }}" $NAME_ID)
nsenter --target $PID --mount --uts --ipc --net --pid
}
docker_in $1
不进入容器执行命令
或许你的本意不是想进去容器,而是想让容器执行一个命令,docker提供了exec,使用exec可以在容器内运行命令。
docker exec mydocker whoami
使用exec进入容器
docker exec -it mydocker /bin/bash