Docker 容器和Shell
默认情况下,当你启动一个容器时,你也会使用一个 shell命令 来启动容器,如下所示。这是我们在前面的章节中使用容器时看到的。
sudo docker run –it centos /bin/bash
我们使用这个命令创建一个新的容器,然后使用Ctrl+P+Q命令退出容器。这样确保即使我们从容器退出后,容器仍然存在。
我们可以使用Docker的 ps 命令来验证容器仍然存在。如果我们直接退出容器,那么容器本身将被销毁。
现在有一种更简单的方法来附加到容器并干净地退出它们,而不需要销毁它们。实现这一方式的一种方法是使用 nsenter 命令。
在运行 nsenter 命令之前,您需要先安装 nsenter 镜像。可以使用以下命令来完成:
docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter
nsenter
此方法允许在不退出容器的情况下连接到容器。
语法
nsenter –m –u –n –p –i –t containerID command
选项
- -u 用于指定 Uts namespace。
- -m 用于指定 mount namespace。
- -n 用于指定 network namespace。
- -p 用于指定 process namespace。
- -i 用于使容器以交互模式运行。
- -t 用于连接容器的 I/O 流到宿主操作系统。
- containerID - 这是容器的 ID。
- Command - 这是要在容器内运行的命令。
返回值
无
示例
sudo nsenter –m –u –n –p –i –t 2978 /bin/bash
输出
从输出结果中,我们可以观察到以下几点−
-
当我们执行 nsenter 命令时,提示符会直接变成 bash shell 。
-
然后我们执行 exit 命令。通常情况下,如果你没有使用 nsenter 命令,容器会被销毁。但是你会注意到,当我们运行 nsenter 命令时,容器仍然在运行。