报错 Cannot connect to the Docker daemon 怎么解决?

报 Is the docker daemon running 时先核对 context 与实际端点,再按 rootful、rootless、Desktop 或远程环境检查服务、API 连通与权限。本文给出完整排查链。

最佳实践
报错 Cannot connect to the Docker daemon 怎么解决?封面

排查主线:这个错误表示 Docker 客户端连不上守护进程。先用 docker context show、docker context inspect 和 DOCKER_HOST/DOCKER_CONTEXT 核对实际端点,再按环境检查。对本机 rootful systemd 服务:①sudo systemctl status docker 看守护进程在不在跑,没在跑就 start;②sudo docker info 验证该端点是否响应API;③sudo 能连、普通用户不能连 → 先确认两者使用同一端点,再检查权限;rootless 服务应在用户会话用 systemctl --user 排查。

第一步:守护进程在跑吗

sudo systemctl status docker
  • active (running) → 跳到第二步
  • inactive/failed → 启动它:
sudo systemctl start docker
sudo systemctl enable docker   # 顺便设置开机自启

启动失败就看日志找原因:

sudo journalctl -u docker --since "10 min ago"

常见失败原因:磁盘满、配置文件(/etc/docker/daemon.json)语法错、存储驱动不兼容。

第二步:守护进程本身正常吗

sudo docker info

能输出系统信息只说明该端点可响应,不能证明存储、网络和容器全都健康;sudo 可能使用不同 context 和环境,不能直接判定普通用户权限错误;sudo 都连不上,回到第一步深挖守护进程日志。

第三步:解决权限

sudo usermod -aG docker $USER
newgrp docker      # 或注销重登
docker ps          # 免 sudo 验证

常见 rootful socket 为 root:docker、权限 660,但应检查实际端点、数字 UID/GID 和安全策略;仅在确认组权限不足时按上例授权。

其他环境的表现

  • Mac/Windows(Docker Desktop):没有 systemctl,报这个错通常是 Desktop 应用没启动或启动中——打开 Docker Desktop 等鲸鱼图标稳定。
  • WSL2:确认用的是 Docker Desktop 的 WSL 集成,或 WSL 发行版内的 docker 服务已启动。
  • 远程守护进程:设了 DOCKER_HOST 环境变量时客户端连的是远端,检查该变量与远端可达性(echo $DOCKER_HOST)。

常见问题(FAQ)

Q:重启机器后才出现这个错?
A:docker 服务没设开机自启,sudo systemctl enable docker。

Q:daemon.json 改完启动失败?
A:先用 python3 -m json.tool 检查 JSON,再用支持的 dockerd --validate --config-file=/etc/docker/daemon.json 检查配置语义,并排查与启动参数重复的选项。

Q:磁盘满会导致守护进程起不来吗?
A:会。df -h 确认,先 docker system prune(如果能起)或清理 Docker 管理目录之外已确认可删除的文件;不要手动删除 /var/lib/docker 内部文件,这可能破坏镜像、容器和卷数据。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台