RHEL中Docker 17.x权限报错解决及以其他用户启动守护进程
解决Docker权限拒绝问题 & 以其他用户启动Docker守护进程
一、解决docker version权限拒绝异常
你碰到的这个报错,本质是当前用户没有权限访问Docker守护进程的Unix套接字(/var/run/docker.sock)——默认只有root用户和docker组的成员能操作这个套接字。按下面的步骤就能搞定:
- 先创建
docker用户组(如果系统里还没有的话):sudo groupadd docker - 把当前用户加入
docker组:sudo usermod -aG docker $USER - 让组权限立即生效(不用重新登录):
newgrp docker - 现在再执行
docker version,就能正常显示客户端和守护进程的版本信息了:docker version
要是你重新登录系统,这个权限会永久生效,之后不用再跑newgrp docker。
二、以其他用户身份启动Docker守护进程
Docker守护进程(dockerd)默认用root用户运行,因为它需要访问内核级资源(比如网络、存储设备)。如果确实要换其他用户启动,得做这些配置(注意:这种方式容易引发各类权限问题,只推荐在特殊场景下用):
- 创建一个专门的系统用户(用来运行Docker守护进程,禁止交互式登录):
sudo useradd -r -s /sbin/nologin dockerd-user - 修改Docker相关目录的所有权,让这个用户能访问:
sudo chown -R dockerd-user:dockerd-user /var/lib/docker sudo chown dockerd-user:dockerd-user /var/run/docker.sock - 修改Docker的systemd服务配置文件(通常路径是
/usr/lib/systemd/system/docker.service):
找到ExecStart行,加入--user dockerd-user参数,修改后类似这样:ExecStart=/usr/bin/dockerd --user dockerd-user -H fd:// --containerd=/run/containerd/containerd.sock - 重新加载systemd配置并重启Docker服务:
sudo systemctl daemon-reload sudo systemctl restart docker - 验证Docker守护进程的运行用户:
输出里应该能看到ps aux | grep dockerddockerd-user作为运行用户。
额外提醒:用非root用户跑Docker守护进程,大概率会遇到无法创建网络、挂载卷、访问设备这类权限问题,生产环境里一般还是推荐用默认的root用户运行。
内容的提问来源于stack exchange,提问作者Learn Hadoop
相关产品推荐
相关产品推荐

