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 报 Got permission denied while trying to connect to the Docker daemon socket 怎么修复?封面

标准修复:把当前用户加入 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

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台