首页 > 解决方案 > 无法使用 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

但是,如果我更改bashsh如下所示,它可以工作

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

标签: bashdockernsenter

解决方案


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

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.


推荐阅读