我使用 docker 解压 linux chroot,然后在其中执行命令,但我在 chroot 中得到了这个。
echo ciao > /dev/null
bash: /dev/null: Permission denied
我认为空设备一定已损坏,所以我尝试了其他方法:
rm -f /dev/null ; mknod -m 0666 /dev/null c 1 3; echo ciao > /dev/null
bash: /dev/null: Permission denied
但它也没有奏效。
stat
在 main 上的操作/dev/null
和 chroot 内的操作没有任何区别。
我写这篇文章是因为我似乎是第一个写到这个问题的人。
答案1
出于速度原因,我的 chroot 被提取到 tmpfs 上,我将其挂载--tmpfs /tmpfs:exec
到 docker。
我的坐骑是这样的:
tmpfs on /tmpfs type tmpfs (rw,nosuid,nodev,relatime)`
事实证明,与我必须通过覆盖docker 添加到 tmpfs 安装的exec
默认值的方式类似noexec
,有一个nodev
我必须覆盖的传递。
所以参数就变成了这样:
--tmpfs /tmpfs:exec,dev
烦人的部分是mknod
不会失败或报告任何错误。设备文件已创建,但无法运行。