今日发现在 Docker 容器中操作 su xxx 切换为某个用户时,出现了 system error 的错误,没有除此之外没有任何提示。另外还发先,容器中的 cron 定时任务调度也不执行。
首先查看系统日志文件进行排查,没发现任何错误信息,该条路走不通。
在宿主机中执行 su 命令是没问题的,刚开始怀疑是否是 SELinux 问题导致的,排查宿主机的 SELinux 为 Disabled 状态,也没问题。
后来发现是由于 docker 的运行权限问题。大约在 0.6 版本,privileged 被引入 docker。使用该参数,container 内的 root 拥有真正的 root 权限。否则,container 内的 root 只是外部的一个普通用户权限。privileged 启动的容器,可以看到很多 host 上的设备,并且可以执行 mount。甚至允许你在 docker 容器中启动 docker 容器。
后来通过如下命令运行解决,新增加了 —privileged 参数,帮助各位排个坑。
docker run —name xxx —privileged xxx