问题描述
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
。