Docker - 容器Shell

Docker - 容器Shell 首页 / Docker入门教程 / Docker - 容器Shell

默认情况下,启动容器时还将使用Shell命令,如下所示:这是我们在前面几章中使用容器时所看到的

Shell Command

在上面的屏幕截图中,您可以观察到我们发出了以下命令-

sudo docker run it centos /bin/bash 

我们使用此命令创建了一个新容器,然后使用Ctrl + P + Q命令退出了该容器,它确保即使我们从容器中退出后,该容器仍然存在。

现在,有一种更简单的方法可以连接到容器并干净地退出它们,而无需销毁它们,实现此目的的一种方法是使用 nsenter 命令。

我们运行之前在 nsenter 的命令,你需要首先安装在 nsenter 的镜像。可以通过使用以下命令来完成-

docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter
Nsenter Image

在使用 nsenter 命令之前,我们需要获取容器的进程ID,因为这是 nsenter 命令所必需的。我们可以通过Docker inspect命令获取进程ID,并通过 Pid 对其进行过滤。

Inspect Command

如上图所示,我们首先使用 docker ps 命令查看正在运行的容器,我们可以看到有一个正在运行的容器,其ID为ef42a4c5e663。

然后,我们使用Docker inspect 命令检查此容器的配置,然后使用 grep 命令仅过滤进程ID。从输出中,我们可以看到进程ID为2978。

现在我们有了进程ID,我们可以继续并使用 nsenter 命令附加到Docker容器。

nsenter

这种方法允许人们在不退出容器的情况下连接到容器。

nsenter –m –u –n –p –i –t containerID command

  • -u  Uts名称空间

  • -m 挂载(mount)空间

  • -n  网络(network)空间

  • -p  进程(process)空间

  • -i   容器以交互模式运行。

  • -t   用于将容器I/O流连接到主机OS。

  • containerID   -  这是容器的ID。

  • command       -  这是在容器内运行的命令。

sudo nsenter m u n p i t 2978 /bin/bash
Nsenter

从输出中,我们可以观察到以下几点-

  • 当我们发出 nsenter 命令时,提示符将直接更改为 bash shell 。

  • 然后我们发出 exit 命令,如果您不使用 nsenter 命令,则该容器将被销毁。但是您会注意到,当我们运行 nsenter 命令时,该容器处于运行状态。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

微服务架构核心20讲 -〔杨波〕

深入浅出区块链 -〔陈浩〕

硅谷产品实战36讲 -〔曲晓音〕

邱岳的产品实战 -〔邱岳〕

消息队列高手课 -〔李玥〕

用户体验设计实战课 -〔相辉〕

张汉东的Rust实战课 -〔张汉东〕

陶辉的网络协议集训班02期 -〔陶辉〕

手把手带你搭建秒杀系统 -〔佘志东〕

好记忆不如烂笔头。留下您的足迹吧 :)