bash - 无法使用 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
.
推荐阅读
- c# - 如何获取父类的实例,即在使用对象初始化时已启动当前类的类?
- curve-fitting - python中的高斯拟合
- ionic-framework - 不能在 ionic 3 中使用本机插件?
- cassandra - cassandra 中的动态告密者
- bash - 合并和拆分,在 bash 中使用 csplit
- networking - 用于 Web 开发的两台计算机之间的网络
- excel - 在 VBA 中复制粘贴数据的“正确”方法是什么?
- javascript - Javascript canvas.toDataUrl() 在 Firefox 中未正确编码
- c# - 如何从编辑视图中的表单将 DTO 传递给编辑 POST 操作?
- sql - 检查一列中不同值的总和与同一表中另一组的不同总和