Docker 报 Got permission denied while trying to connect to the Docker daemon socket 怎么修复?

先核对实际 context 和 socket;原生 Linux rootful 的组权限问题可加 docker 组并重新登录。~/.docker 属主错误需另行确认,不是所有 sudo 使用都要修复。

最佳实践
Docker 报 Got permission denied while trying to connect to the Docker daemon socket 怎么修复?封面

若连接的是原生Linux rootful Docker的组受控Unix 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 version   # 先验证服务端连接,不依赖镜像仓库下载

原理一句话

常见rootful配置的 /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 -R "$(id -u):$(id -g)" "$HOME/.docker"
# 按实际文件权限最小化修复,不向组递归开放读写执行

不想加组的替代

  • 每次 sudo docker ...(脚本里注意环境差异)
  • rootless 模式 Docker:普通用户跑自己的守护进程,隔离更彻底

安全提醒

docker 组成员等价于 root(可挂载宿主机根目录读写任意文件)。共享服务器/CI 节点上加组要控制名单,审计组内成员:

getent group docker

常见问题(FAQ)

Q:newgrp 后当前终端好了,新开终端又不行?
A:组信息在登录时载入,彻底注销重登才对所有会话生效;桌面环境要重登图形会话。

Q:su - 切换的用户也报权限错?
A:su - user 新会话会重新载组信息,应在新会话用id检查实际进程组,并确认连接的socket/context;登录shell与组加载不能简单用有无-一概判断。

Q:CI 脚本里怎么免 sudo?
A:CI runner 的运行用户加进 docker 组后重启 runner 服务,服务文件里也可显式 SupplementaryGroups=docker。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台