无法使用 bin/bash 进入容器命名空间

问题描述

一个终端中,我有一个正在运行的容器

docker container run --rm -it bash

在另一个终端中,我想在与上面运行的容器相同的命名空间中运行 bin/bash。为此,我遵循了以下步骤:

获取正在运行的容器的PID

docker inspect --format {{.State.Pid}} 32d7a757bc05

假设 PID 是 3386。当我运行时

sudo nsenter --target 3386 --mount --uts --ipc --net --pid bash

我收到此错误

nsenter: Failed to execute bash: No such file or directory

但如果我将 bash 更改为 sh 如下,它会起作用

sudo nsenter --target 3386 --mount --uts --ipc --net --pid sh

我使用的是 Centos 7,docker 版本 20.10.6,正如您所注意到的,我正在从 bash image 运行我的容器。我不明白为什么 bash 不起作用。有人可以解释一下吗?

更新

只是提供更多背景信息。我将 Centos 作为 Vagrant VM 运行。我使用 vagrant ssh 连接到两个终端。

流浪文件

Vagrant.configure("2") do |config|
config.vm.Box = "centos/7"
config.vm.provider "hyperv"
end

解决方法

你所描述的实际上对我有用:

sudo docker container run --rm -it bash

在第二个终端中:

sudo nsenter --target 604861 --mount --uts --ipc --net --pid bash
bash-5.1# which bash
/usr/local/bin/bash

我按照您描述的方式找到了 PID,使用 docker inspect --format {{.State.Pid}} CONTAINERID

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...