事情本身不复杂,线索都在日志里。CentOS 7 上把 deploy 账号加进 docker 组,usermod -aG docker deploy 执行成功,groups 里也看得到,但当前会话执行 docker ps 仍然报 permission denied。
第一反应是「改的是 /etc/group 而进程读到的是内核里的组缓存」,验证下来不成立。
这类报错背后常见的原因有几处,逐个排除就行。组关系在登录时写进进程的附加组列表,会话里不会自动刷新。少数情况下是用户的 shell 与 systemd 会话由老进程持有,新组要重新建立会话才带上。
另外,登录方式用了 sudo -u 切换,附加组按目标用户的配置重新计算,与当前会话不一致。
动手时先确认磁盘上的组关系已经生效
id deploy && grep docker /etc/group
再往下让目标用户重新登录后再验证
su - deploy -c 'docker ps'
需要立即生效时用 newgrp 开启新会话
su - deploy -c 'newgrp docker'
末了确认文件或套接字的组权限匹配
ls -l /var/run/docker.sock
改完先别撤,确认这几项。id 输出里包含 docker 组,重新登录后 docker ps 返回容器列表而不是 permission denied,/var/run/docker.sock 的组为 docker 且权限 660。
usermod 只改配置不动已有会话,这是最常见的误解;把账号加进 docker 组等于给 root 权限,授权前要确认这个人确实需要。这类问题最好一次改到位,反复小改反而容易把原因搅混。
