在一个终端中,我有一个正在运行的容器
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
我使用的是Centos7,docker版本20.10.6,正如您所注意到的,我正在从bash镜像运行我的容器。我不明白bash为什么不起作用。有人能解释一下吗?
更新
只是提供更多的背景信息。我正在运行我的Centos作为一个流浪虚拟机。我使用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
在那里,我使用docker inspect --format {{.State.Pid}} CONTAINERID
按照您描述的方式找到了PID。