Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

如何解决在 CentOS 7 上解决因未设置 Docker 开机自启而出现的 “Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?” 问题
在 CentOS 7 环境下,当我们在未开启 Docker 服务开机自启(systemctl enable docker)的情况下重启系统,再次执行任何 docker 命令时,往往会遇到令人头疼的报错信息——“Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?”。本篇文章将重点讲解如何在 CentOS 7 上快速定位并彻底解决该“Docker 守护进程连接失败”问题,涵盖从启动 Docker 服务、验证 /var/run/docker.sock 套接字权限,到编辑 /etc/docker/daemon.json 配置镜像加速,再到一键设置 Docker 开机自启的全流程操作步骤,帮助您在云原生部署中避免因 Docker 服务未自启造成的容器构建和镜像拉取失败。


目录

  1. 问题描述

  2. 环境与前提

  3. 错误现象分析

  4. 根本原因

  5. 解决思路概览

  6. 详细操作步骤

    1. 安装并启动 Docker 服务
    2. 验证 Docker 服务状态
    3. 编辑 /etc/docker/daemon.json 并配置镜像加速
    4. 重启 Docker 服务并验证
    5. 设置 Docker 开机自启
  7. 常见误区与排查建议

  8. 总结与最佳实践

  9. 参考资料


问题描述

在 CentOS 7 中执行任何 docker 命令时,均提示:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

此时无论是否已执行 systemctl start docker,重启机器后再次使用 docker 命令依然报错,影响日常容器建设与部署工作。


环境与前提

  • 操作系统:CentOS 7.x
  • Docker 版本:Docker CE 或 Docker EE(18.x 及以上均适用)
  • 用户:具有 sudo 权限或 root 用户
  • 网络环境:访问 Docker Hub 速度较慢,推荐使用国内镜像加速

错误现象分析

  1. 执行命令 docker versiondocker info 时,均报相同错误:

    $ docker info
    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
    
  2. 查看 Docker 服务状态:

    $ systemctl status docker
    ● docker.service - Docker Application Container Engine
       Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
       Active: inactive (dead)
    

    其中可以看到 Loaded 一行的末尾标注为 disabled,说明该服务未设置自动启动,且当前处于未运行(inactive)状态。


根本原因

  • Docker 服务未设置开机自启
    CentOS 7 默认安装 Docker 后,docker.service 并不会自动随系统启动。未手动 enable 服务时,每次重启都需要手动执行 systemctl start docker,否则 /var/run/docker.sock(Docker 守护进程的 UNIX 套接字)不会存在,从而导致客户端无法连接守护进程。

解决思路概览

  1. 启动并验证 Docker 服务,确保能够正常运行。
  2. 配置国内镜像源加速,提升拉取镜像速度,避免因网络缓慢导致超时等其他问题。
  3. 设置 Docker 服务开机自启,保证重启后无需手动启动。
  4. 验证最终效果,确保 docker 命令恢复正常使用。

详细操作步骤

1. 安装并启动 Docker 服务

如果尚未安装 Docker,可参考官方文档安装。这里假设已安装。

# 安装完成后,先启动服务
sudo systemctl start docker

2. 验证 Docker 服务状态

# 查看服务状态
sudo systemctl status docker
  • 若显示 Active: active (running) 且无报错,即守护进程已正常运行。

  • 若仍未运行,可查看日志定位问题:

    sudo journalctl -u docker -n 50 --no-pager
    

3. 编辑 /etc/docker/daemon.json 并配置镜像加速

在国内环境下,访问 Docker 官方仓库速度较慢,建议添加国内镜像加速配置:

  1. 确保目录存在:

    sudo mkdir -p /etc/docker
    
  2. 编辑或新建文件 /etc/docker/daemon.json

    sudo vi /etc/docker/daemon.json
    
  3. 添加如下内容,替换为你所选的镜像加速地址(以阿里云为例):

    {
      "registry-mirrors": [
        "https://<your-id>.mirror.aliyuncs.com"
      ]
    }
    

    说明

    • registry-mirrors:指定加速器地址数组,可填多个。
    • 保存后,文件需为合法 JSON 格式。

4. 重启 Docker 服务并验证

# 重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker

# 再次检查状态
sudo systemctl status docker
  • 如果显示 Active: active (running),则守护进程连接套接字 /var/run/docker.sock 已恢复。

  • 可执行拉取测试:

    docker pull busybox
    

    若能正常拉取并显示进度,说明配置和服务均正常。

5. 设置 Docker 开机自启

为避免下次重启后再次出现同样问题,建议设置 Docker 服务随系统启动:

sudo systemctl enable docker
  • 执行后,docker.serviceLoaded: 一行将由 disabled 变为 enabled

  • 再次重启系统验证:

    sudo reboot
    
    # 重启后无需手动启动
    docker info
    

常见误区与排查建议

  1. 仅配置镜像加速而未启动服务

    • 配置文件无效时,守护进程也可能启动失败。请先确认服务可启动,再添加镜像配置。
  2. daemon.json 格式错误

    • JSON 中不能有多余逗号,严格按照 JSON 语法书写,否则重启时会报解析错误。
    • 可执行 docker info,若配置错误,通常会在日志中看到 Error parsing config file
  3. SELinux 或权限导致套接字不可访问

    • /var/run/docker.sock 默认归属为 root:docker,需确保当前用户在 docker 组内:

      sudo usermod -aG docker $USER
      
    • 退出并重新登录后生效。


总结与最佳实践

  • 核心问题:未设置 Docker 服务开机自启,导致重启后守护进程未运行,客户端无法连接套接字。

  • 解决方案

    1. 启动并验证 Docker 服务
    2. 编辑 /etc/docker/daemon.json 添加 registry-mirrors
    3. 重启服务,确认正常
    4. 执行 systemctl enable docker 设置开机自启
  • 建议

    • 在所有生产或开发节点上统一配置镜像加速和开机自启。
    • 定期检查 Docker 日志和服务状态,避免因版本升级、配置变更导致意外中断。
    • 对于多节点集群,可结合 Ansible、SaltStack 等自动化工具,统一下发上述配置。

参考资料

  1. Docker 官方文档 — Daemon 配置文件
  2. 阿里云加速器使用指南 — Docker 镜像加速
  3. CentOS 7 Systemd 指南 — systemctl 命令详解

后记:确保 Docker 服务的高可用和稳定运行,是云原生平台建设的基础。正确的开机自启配置和镜像源优化,可以大幅减少生产环境中因服务未启动或拉取超时带来的风险。祝你在云原生之路上一路顺畅!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值