Docker 报 Got permission denied while trying to connect to the Docker daemon socket 怎么修复?
该错误是当前用户无权访问 /var/run/docker.sock:把用户加入 docker 组(usermod -aG docker $USER)并重新登录即可;曾用 sudo 跑过 docker 的还要修 ~/.docker 目录属主。
标准修复:把当前用户加入 docker 组——sudo usermod -aG docker $USER,然后注销重新登录**(或 newgrp docker),之后 docker 命令免 sudo。如果以前一直用 sudo docker,还可能要顺手修复 ~/.docker/ 目录的属主问题。**
完整步骤
# 1. 确保 docker 组存在(报已存在则跳过)
sudo groupadd docker
# 2. 加入当前用户
sudo usermod -aG docker $USER
# 3. 生效:注销重登,或当前终端先顶一下
newgrp docker
# 4. 验证
docker run hello-world
原理一句话
/var/run/docker.sock 属主为 root:docker、权限 660——组内用户可读可写,组外用户一律 permission denied。
隐藏坑:~/.docker 属主被 sudo 污染
之前长期 sudo docker ... 会在你的 HOME 下生成 root 属主的配置目录,加组后可能报新错误:
WARNING: Error loading config file: /home/you/.docker/config.json ...
permission denied
修复:
sudo chown "$USER":"$USER" ~/.docker -R
sudo chmod g+rwx ~/.docker -R
不想加组的替代
- 每次
sudo docker ...(脚本里注意环境差异) - rootless 模式 Docker:普通用户跑自己的守护进程,隔离更彻底
安全提醒
docker 组成员等价于 root(可挂载宿主机根目录读写任意文件)。共享服务器/CI 节点上加组要控制名单,审计组内成员:
getent group docker
观测云对照
权限收紧不影响采集。 即使用户侧严控 docker 组,DataKit 以服务化方式部署、由安装脚本配好所需权限,主机与容器日志指标照常采集,不依赖日常用户权限。
常见问题(FAQ)
Q:newgrp 后当前终端好了,新开终端又不行?
A:组信息在登录时载入,彻底注销重登才对所有会话生效;桌面环境要重登图形会话。
Q:su - 切换的用户也报权限错?
A:su - user 新会话会重新载组信息,该用户在组里即可;su user(不带 -)可能保留旧会话环境。
Q:CI 脚本里怎么免 sudo?
A:CI runner 的运行用户加进 docker 组后重启 runner 服务,服务文件里也可显式 SupplementaryGroups=docker。