在 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/docker
)nosuid
。我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-root
is/home/docker/data
且du
显示了 的安装(但或/home
没有安装),则为。/home/docker
/home/docker/data
/path/to/mountpoint
/home
(感谢@DonTintoretto 的跟进,帮助我扩展了这个答案。)