概述
文章目录
- 前言
- 1 报错场景
- 2 解决方案
- 3 反思
- 4 总结
- 参考文献
前言
因为我的docker放在/mnt (原本属于root,而非本用户)文件夹下,所以每次登陆docker容器都要用root登,很不方便,然后我错误地使用了 sudo chown -R dale:dale /mnt/docker/overlay2/
这个指令。。。导致权限错误(把有些镜像、容器内的root文件夹也赋予了普通用户权限)。
故在此记录解决方案。
1 报错场景
- docker 容器是Ubuntu14.04 版本
我之前运行了sudo chown -R dale:dale /mnt/docker/overlay2/
之后,没有发觉异常。
但是今天:
1)新建一个容器,即运行
docker run --name test-container -v /home/dale/:/data -it ubuntu:14.04
;
2)然后进入容器:
docker start test-container
docker exec -it -u dale test-container bash
3)准备在/
根文件夹创建个软链接:
sudo ln -s /home/dale/xxx xxx
4)此时报错:
sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set
2 解决方案
1)参考[1],注意:这里需要root权限。正好,我是docker容器,只需要运行:
docker exec -it -u root test-container bash
此时即以root的身份进入docker容器中。
然后运行:
ls -l /usr/bin/sudo
chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo
而后,运行exit
,退出容器,运行:docker exec -it -u dale test-container bash
以用户身份进入容器(其实也可以不exit,直接su - dale
,都可以)。
此时再次尝试创建软链接,又报错:
sudo: error in /etc/sudo.conf, line 0 while loading plugin `sudoers_policy’
sudo: /usr/lib/sudo/sudoers.so must be owned by uid 0
sudo: fatal error, unable to load plugins
2)于是,参考[2],以root身份运行:
chmod 644 /usr/lib/sudo/sudoers.so
chown -R root /usr/lib/sudo
此时再次以dale用户,尝试创立软链接,又报错:
sudo: /etc/sudoers is owned by uid 1000, should be 0
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
3)于是,参考[3],以root权限运行:
chown root:root /etc/sudoers
此时,再次尝试创立软链接,这次没报错,但报了warning:
sudo: /etc/sudoers.d is owned by uid 1000, should be 0
sudo: /var/lib/sudo owned by uid 1000, should be uid 0
4)于是,再次以root权限,运行:
chown root:root /etc/sudoers.d/
chown root:root /var/lib/sudo/
此时,再次尝试创建软链接,这次又报了一个warning:
sudo: /etc/sudoers.d/README is owned by uid 1000, should be 0
5)于是,再次以root权限运行:
chown root:root /etc/sudoers.d/README
此时,终于可以使用sudo了。
3 反思
还是很折腾的哈。
其实可以不需要这样的指令:sudo chown -R dale:dale /mnt/docker/overlay2/
有以下两种代替方案:
1)在docker还没有转移到/mnt的时候,运行chown -R dale:dale /mnt
可能会好些。
2)[更为稳妥的方案] :对每一个docker容器,在容器内运行 chown -R dale:dale home/dale/
即可。
(具体有待进一步探究。)
4 总结
写这个有点麻烦,但是我感觉这确实很有必要记下来,因为问题一个接一个,环环相扣,觉得很有意思,遂记之笔墨也。
参考文献
[1] 修改了Ubuntu下的/usr目录权限,导致不能使用sudo命令的修复 https://blog.csdn.net/lengxibo/article/details/8284844
[2] sudo: error in /etc/sudo.conf, line 0 while loading plugin ‘sudoers_policy’ https://blog.csdn.net/lileihappy/article/details/79214156
[3] sudo: /etc/sudoers is owned by uid 755, should be 0 https://www.cnblogs.com/justinzhang/p/4478977.html
最后
以上就是炙热季节为你收集整理的[解决] Docker容器权限报错 [无法使用sudo]:sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set的全部内容,希望文章能够帮你解决[解决] Docker容器权限报错 [无法使用sudo]:sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复