为什么 sudo 在 docker 内部失败并抱怨 nosuid ?

为什么 sudo 在 docker 内部失败并抱怨 nosuid ?

在 Docker 容器内运行sudo会产生错误

sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?

权限sudo设置正确:

-rwsr-xr-x 1 root root 149080 gen 18  2018 /usr/bin/sudo

此外,根文件系统未安装为nosuid. (mount | grep nosuid不包括/作为安装点。)

可能出什么问题了?

答案1

根据这个GitHub 帖子,作者:asbe,

一台主机上的容器可以使用 sudo 正常,但在几乎相同的主机上会发生错误。最后发现原因是因为有问题的主机使用“overlay”作为存储驱动程序和其他“aufs”。两个 docker 安装都已将 /var/lib/docker 移动到安装有“nosuid”的驱动器。事实证明“覆盖”尊重“nosuid”。只需确保 /var/lib/docker 安装在删除了“nosuid”的磁盘上就可以解决所有问题。(奇怪的是 - 使用“aufs”的设置不会发生这种情况)

(重点是我加的。)

事实上,我是从另一个启用该选项的驱动器安装 Docker 的data-root(默认情况下/var/lib/dockernosuid。我nosuid在主机上禁用了此命令:

sudo mount -n -o remount,suid /path/to/mountpoint

然后sudo重启容器就可以了。

决定/path/to/mountpoint:路径/path/to/mountpoint是包含您的data-root.要首先确定data-root目录,请运行docker info | grep "Docker Root".然后使用df在该列中查找对应的挂载点Mounted on。例如,如果docker-rootis/home/docker/datadu显示了 的安装(但或/home没有安装),则为。/home/docker/home/docker/data/path/to/mountpoint/home

(感谢@DonTintoretto 的跟进,帮助我扩展了这个答案。)

相关内容