nsenter工具进入docker容器
概述
对于运行在后台的docker容器,我们经常需要做的事情是进入到容器中,docker为我们提供了docker exec 、docker attach 命令,并且还提供了nsenter工具,外部工具供我们使用。docker attach存在的问题是:当多个窗口同时attach到同一个容器时,所有的窗口都会同步的显示,假如其中的一个窗口发生阻塞时,其它的窗口也会阻塞,docker attach命令可以说是最不方便的进入后台docker容器的方法。docker exec命令是在docker 1.3之后增加的一个比docker attach命令更加方便的命令。和docker exec差不多方便的命令是nsenter工具。

nsenter安装
$ cd /tmp;
$ curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24;
$ ./configure  --without-ncurses
$ make nsenter && sudo cp nsenter /usr/local/bin


nsenter使用
在使用nsenter命令之前需要获取到docker容器的进程,然后再使用nsenter工具进去到docker容器中,具体的使用方法如下:

$ docker inspect -f { {.State.Pid}} 容器名或者容器id   #每一个容器都有.State.Pid,所以这个命令除了容器的id需要我们根据docker ps -a去查找,其他的全部为固定的格式
$ nsenter --target 上面查到的进程id --mount --uts --ipc --net --pid  #输入该命令便进入到容器中

解释nsenter指令中进程id之后的参数的含义:
* –mount参数是进去到mount namespace中
* –uts参数是进入到uts namespace中
* –ipc参数是进入到System V IPC namaspace中
* –net参数是进入到network namespace中
* –pid参数是进入到pid namespace中
* –user参数是进入到user namespace中

在Linux中,最爱简单的查看指定命令参数含义的办法是在终端中输入:

$ nsenter --help  #会回显所有与该命令有关的参数
$ man nsenter  #能查到更加详细的使用示例和参数说明

现象
启动docker容器
docker run –name [CONTAINER_NAME] [CONTAINER_ID]
查看容器运行状态
docker ps -a
发现刚刚启动的mydocker容器已经退出

原因
docker容器的主线程(dockfile中CMD执行的命令)结束,容器会退出

办法
可以使用交互式启动

docker run -i [CONTAINER_NAME or CONTAINER_ID]

上面的不太友好,建议使用后台模式和tty选项

docker run -dit [CONTAINER_NAME or CONTAINER_ID]

查看容器状态

docker ps -a

docker调出后台容器

docker attach [CONTAINER_NAME or CONTAINER_ID]


TIPs:退出时,使用[ctrl + D],这样会结束docker当前线程,容器结束,可以使用[ctrl + P][ctrl + Q]退出而不终止容器运行

如下命令,会在指定容器中执行指定命令,[ctrl+D]退出后不会终止容器运行

docker exec -it [CONTAINER_NAME or CONTAINER_ID] /bin/bash

nsenter工具进入docker容器概述对于运行在后台的docker容器,我们经常需要做的事情是进入到容器中,docker为我们提供了docker exec 、docker attach 命令,并且还提供了nsenter工具,外部工具供我们使用。docker attach存在的问题是:当多个窗口同时attach到同一个容器时,所有的窗口都会同步的显示,假如其中的一个窗口发生阻塞时,其它的窗口...
我们run了一个image,如果 容器 的任务执行完了,那么这个 容器 就会 退出 。当然我们想要exec 进入也就不行了。 如果不想要 容器 退出 ,那么必须让 容器 的任务一直执行,比如一些web监听任务或者top命令等。 docker file FROM centos docker run -it id top 那么这个 容器 就会执行top,不会 退出 。 我们可以使用: 4、 运行 mysql:(run) 运行 时需要指定mysql密码,密码我设置为root docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 5、查看所有正在 运行 容器
问题描述执行 docker run image-id bash后, 容器 退出 解决方法 docker 容器 的主线程(dockfile中CMD执行的命令)结束, 容器 退出 有以下几种解决方法:使主进程无法结束 docker run -d centos /bin/bash -c "while true;do echo hello docker ;sleep 1;done"使用交互式启动 docker run -
运行 容器 时可以指定其执行什么命令,但是这个命令执行完了,这个 容器 就自动终止了 所以这个命令执行不会完成,那么 容器 就不会终止 1. docker run时可以指定/bin/sh "while true; do sleep 1; done” 2. 运行 容器 执行的脚本最后可以增加 #!/bin/bash while [ 1 = 1 ] sleep 1; 查看 容器 运行 状态 docker ps -a 发现刚刚启动的my docker 容器 已经 退出 原因 docker 容器 的主线程(dockfile中定义)结束, 容器 退出 办法 docker run -dit ubuntu After it, I can saw the processes runni
docker run -d configserver tail -f /dev/null docker run -d configserver /bin/bash ping 127.0.0.1 docker run -d configserver /bin/bash -c "while true;do