You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

非root用户安装Docker及CentOS 6.9平台免root源码构建方法咨询

非root用户如何安装Docker?

其实默认情况下,Docker的安装和运行通常需要root权限,但有两种常见的方式可以让非root用户搞定这件事,你可以根据自己的场景选择:

  • 方式一:先借root权限完成基础安装,再配置非root权限
    这是最通用的方案,适合能临时拿到root权限的情况:

    1. 让有root权限的人按照系统对应的包管理流程安装Docker(比如CentOS用yum,Ubuntu用apt);
    2. 创建docker用户组(如果还没存在):sudo groupadd docker
    3. 把你的非root用户加入这个组:sudo usermod -aG docker $USER
    4. 退出当前会话再重新登录,或者执行newgrp docker让权限生效,之后直接运行docker run hello-world就能测试是否可用了。
  • 方式二:完全以非root身份安装Rootless Docker
    这个方案适合完全碰不到root权限的场景,但对系统版本有要求(Linux内核至少4.19,且系统支持user namespace):

    1. 先安装必要的工具,比如uidmapslirp4netns——如果没有root权限,你需要从源码编译这些工具并安装到自己的用户目录下;
    2. 配置你的用户subuid和subgid:这一步可能需要root帮忙编辑/etc/subuid/etc/subgid,添加一行你的用户名:100000:65536(给你的用户分配独立的UID/GID范围);
    3. 然后按照官方的rootless安装流程(无需root)完成Docker安装,之后就能直接以非root身份运行Docker了。

CentOS 6.9系统下,非root用户无需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的版本),步骤大概是这样:

  1. 把构建依赖安装到用户目录(因为是非root,不能装到系统公共目录):

    • 安装Go语言:下载Docker 1.12对应的Go版本(比如Go 1.7.x),解压到~/.local/go,然后把~/.local/go/bin加到你的PATH环境变量里;
    • 安装Git:同样从源码编译Git,安装到~/.local,把~/.local/bin加到PATH;
    • 还要安装makegcc这些工具,如果系统没预装,也得源码编译到用户目录。
  2. 克隆早期Docker源码

    git clone https://github.com/moby/moby.git
    cd moby
    git checkout v1.12.6  # 这个版本是最后支持CentOS6的Docker版本之一
    
  3. 开始构建
    在源码目录执行make build,构建完成后,Docker的二进制文件会生成在./bundles/1.12.6/binary目录下,你可以把这个目录加到自己的PATH里。

  4. 尝试运行(大概率会失败)
    运行dockerd启动Docker daemon,但你会遇到一堆问题:CentOS6.9的内核不支持user namespace(非root用户没法创建隔离的容器环境),缺少overlay文件系统,cgroups功能也不全,就算能启动daemon,运行容器也会各种报错。

最后给个建议:如果可能的话,尽量升级到CentOS7或者更高版本,这样不管是用Rootless Docker还是普通配置权限的方式,都能正常使用Docker,CentOS6实在太老了,已经没有官方支持了。


内容的提问来源于stack exchange,提问作者Shixiang Wang

火山引擎 最新活动