非root用户安装Docker及CentOS 6.9平台免root源码构建方法咨询
其实默认情况下,Docker的安装和运行通常需要root权限,但有两种常见的方式可以让非root用户搞定这件事,你可以根据自己的场景选择:
方式一:先借root权限完成基础安装,再配置非root权限
这是最通用的方案,适合能临时拿到root权限的情况:- 让有root权限的人按照系统对应的包管理流程安装Docker(比如CentOS用yum,Ubuntu用apt);
- 创建
docker用户组(如果还没存在):sudo groupadd docker; - 把你的非root用户加入这个组:
sudo usermod -aG docker $USER; - 退出当前会话再重新登录,或者执行
newgrp docker让权限生效,之后直接运行docker run hello-world就能测试是否可用了。
方式二:完全以非root身份安装Rootless Docker
这个方案适合完全碰不到root权限的场景,但对系统版本有要求(Linux内核至少4.19,且系统支持user namespace):- 先安装必要的工具,比如
uidmap和slirp4netns——如果没有root权限,你需要从源码编译这些工具并安装到自己的用户目录下; - 配置你的用户subuid和subgid:这一步可能需要root帮忙编辑
/etc/subuid和/etc/subgid,添加一行你的用户名:100000:65536(给你的用户分配独立的UID/GID范围); - 然后按照官方的rootless安装流程(无需root)完成Docker安装,之后就能直接以非root身份运行Docker了。
- 先安装必要的工具,比如
先给你说个现实情况:CentOS 6.9的内核版本是2.6.32,这个版本太老了,现代Docker早就不支持了——Docker从1.13版本开始就要求内核至少3.10以上,而且2.6.32缺少很多Docker依赖的核心特性(比如完整的cgroups、user namespace、overlay文件系统支持),就算你源码构建成功,大概率也没法正常运行。
但如果你非要尝试的话,只能构建非常早期的Docker版本(比如1.12.x系列,这是最后一批名义上支持CentOS6的版本),步骤大概是这样:
把构建依赖安装到用户目录(因为是非root,不能装到系统公共目录):
- 安装Go语言:下载Docker 1.12对应的Go版本(比如Go 1.7.x),解压到
~/.local/go,然后把~/.local/go/bin加到你的PATH环境变量里; - 安装Git:同样从源码编译Git,安装到
~/.local,把~/.local/bin加到PATH; - 还要安装
make、gcc这些工具,如果系统没预装,也得源码编译到用户目录。
- 安装Go语言:下载Docker 1.12对应的Go版本(比如Go 1.7.x),解压到
克隆早期Docker源码:
git clone https://github.com/moby/moby.git cd moby git checkout v1.12.6 # 这个版本是最后支持CentOS6的Docker版本之一开始构建:
在源码目录执行make build,构建完成后,Docker的二进制文件会生成在./bundles/1.12.6/binary目录下,你可以把这个目录加到自己的PATH里。尝试运行(大概率会失败):
运行dockerd启动Docker daemon,但你会遇到一堆问题:CentOS6.9的内核不支持user namespace(非root用户没法创建隔离的容器环境),缺少overlay文件系统,cgroups功能也不全,就算能启动daemon,运行容器也会各种报错。
最后给个建议:如果可能的话,尽量升级到CentOS7或者更高版本,这样不管是用Rootless Docker还是普通配置权限的方式,都能正常使用Docker,CentOS6实在太老了,已经没有官方支持了。
内容的提问来源于stack exchange,提问作者Shixiang Wang




