参考资料:http://www.c3crm.com/blog/?p=1496
当我们运行好docker容器之后常常需要进入docker容器内部进行一些操作: 1.docker本身提供了attach命令可以实现这一需求:
$ docker attach [容器名]attach连接docker后,退出docker容器有两种方式: 1.1 按CTRL + D或者输入exit命令退出,这种方式会引起容器停止运行 1.2 先按CTRL +P 再按CTRL + Q退出,这种方式理论上不会引起容器停止运行,实际上还是偶尔引起容器停止运行,出现奇奇怪怪的问题。 所以,我打算介绍一种比较稳妥的方式。
2.利用util-linux包的nsenter命令连接docker容器 2.1 安装util-linux步骤
$ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.29/util-linux-2.29.1.tar.gz -c /usr/local/src $ tar xvf util-linux-2.29.1.tar.gz $ ./configure –without-ncurses $ make #注意不要make install $ cp nsenter /usr/local/bin/2.2 编写连接脚本:connect.sh
#!/bin/sh CONTAINER_NAME=$1 if [ ! -n "$CONTAINER_NAME" ];then echo "请输入即将要登录的容器名称,例如要登录容器xiaoniuapp-api,请输入:./connect.sh xiaoniuapp-api" else CONTAINER_ID=`docker ps -a | grep $CONTAINER_NAME -w | awk '{print $1}'` echo "容器ID:"$CONTAINER_ID CONTAINER_PID=`docker inspect --format "{{ .State.Pid }}" $CONTAINER_ID` echo "容器PID:"$CONTAINER_PID echo "开始连接容器。。。" nsenter --target $CONTAINER_PID --mount --uts --ipc --net --pid fi2.3 使用脚本
$ chmod u+x connect.sh $ ./connect.sh [容器名] 示例如下: [root@Dockerdeploy-app ~]# docker run -i -t --name mynginx nginx /bin/bash root@063e449682f7:/##先按CTRL +P 再按CTRL + Q退出 [root@Dockerdeploy-app ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 063e449682f7 nginx "/bin/bash" 10 seconds ago Up 9 seconds 80/tcp, 443/tcp mynginx [root@Dockerdeploy-app ~]# ./connect.sh mynginx 容器ID:063e449682f7 容器PID:1491 开始连接容器。。。 root@063e449682f7:/#