为什么 sudo 在抱怨 nosuid 的 docker 中失败?

Ben*_*res 4 sudo mount docker

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

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?
Run Code Online (Sandbox Code Playgroud)

权限sudo设置正确:

-rwsr-xr-x 1 root root 149080 gen 18  2018 /usr/bin/sudo
Run Code Online (Sandbox Code Playgroud)

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

可能有什么问题?

Ben*_*res 5

根据asbe 的这篇GitHub 帖子

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

(重点是我加的。)

事实上,我是/var/lib/docker从另一个nosuid启用了该选项的驱动器安装的。我nosuid用这个命令禁用了:

sudo mount -n -o remount,suid /mount/for/var/lib/docker
Run Code Online (Sandbox Code Playgroud)

然后sudo在重新启动容器后工作。