Ubuntu普通用户无法连接Docker daemon仅sudo可用的解决方法
问题根因
- 普通用户执行docker命令时,默认连接的是当前用户家目录下Docker Desktop专属的socket路径
/home/hamsterofdeath/.docker/desktop/docker.sock,但对应服务没正常运行,所以报连接失败。 - 加sudo执行时,使用的是root用户的Docker配置,默认连接系统级Docker Engine的标准socket
/var/run/docker.sock,系统Docker服务本身是正常运行的,所以sudo下命令可以正常执行。 - 执行
apt remove docker无效是因为Debian/Ubuntu系下,docker是早期的无效过渡包名,你实际安装的Docker Engine包名为docker.io或docker-ce,如果装过Docker Desktop则是独立的二进制安装包,所以删错包自然卸不掉。
修复步骤
- 先切换普通用户的Docker上下文到系统原生Engine:
执行命令docker context use default,执行完成后直接测试docker ps,绝大多数场景下这一步就能解决问题。 - 如果切换后还是报权限错误,先检查系统Docker socket的权限配置:
- 执行
sudo ls -l /var/run/docker.sock,确认输出的文件所属组为docker,权限为srw-rw----。 - 如果权限不对,依次执行以下命令修正:
sudo chown root:docker /var/run/docker.sock sudo chmod 660 /var/run/docker.sock - 执行
newgrp docker刷新当前shell的用户组权限,不需要注销重登,再测试docker命令即可。
- 执行
- 如果不需要使用Docker Desktop,直接删除残留的Desktop相关配置避免后续自动切回错误上下文:
docker context rm desktop-linux rm -rf ~/.docker/desktop sudo apt remove docker-desktop -y sudo rm -f /usr/local/bin/com.docker.cli - 如果需要保留Docker Desktop,直接从系统应用菜单启动Docker Desktop图形端,等后台服务完全启动后,普通用户就可以正常连接用户目录下的专属socket,不需要加sudo。
内容的提问来源于stack exchange,提问作者HamsterofDeath
相关产品推荐
相关产品推荐

