Docker 容器和外壳


默认情况下,当你启动容器时,你还将使用 外壳命令 在启动容器时,如下所示。这就是我们在前面章节中使用容器时所看到的。

Shell Command

在上面的截图中,你可以观察到我们发出了以下命令:

sudo docker run –it centos /bin/bash 

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

我们可以通过 Docker 验证容器是否仍然存在 ps 命令。如果我们不得不直接退出容器,那么容器本身就会被销毁。

现在有一种更简单的方法可以连接到容器并干净地退出它们,而无需破坏它们。实现这一目标的一种方法是使用 nsenter command.

在我们运行之前 nsenter 命令,你需要先安装 nsenter 图片。可以使用以下命令来完成:

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

Nsenter Image

在我们使用之前 nsenter 命令,我们需要获取容器的进程ID,因为这是 nsenter 命令。我们可以通过 Docker 获取进程 ID 检查命令 并通过 Pid .

Inspect Command

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

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

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

nsenter


这种方法允许在不退出容器的情况下附加到容器。

语法

nsenter –m –u –n –p –i –t containerID 命令

Options

  • -u 用于提及 uts 命名空间

  • -m 用于提及 挂载命名空间

  • -n 用于提及 网络命名空间

  • -p 用于提及 进程命名空间

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

  • -t 用于将容器的 I/O 流连接到主机操作系统。

  • 容器ID :这是容器的ID。

  • Command : 这是在容器内运行的命令。

返回值

None

例子

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

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

  • 提示更改为 bash 外壳 当我们发出 nsenter command.

  • 然后我们发出 exit 命令。现在通常如果你没有使用 nsenter 命令,容器将被销毁。但是你会注意到,当我们运行 nsenter 命令,容器仍在运行。