谷桐羽 2025-09-01 23:25 采纳率: 98.9%
浏览 1
已采纳

CentOS 7安装Docker与Docker Compose常见问题解析

**问题:在 CentOS 7 上安装 Docker 和 Docker Compose 时,如何解决“Cannot connect to the Docker daemon”错误?** 在 CentOS 7 上安装配置 Docker 后,执行 `docker info` 或 `docker run hello-world` 时,出现 “Cannot connect to the Docker daemon” 错误。此问题通常由 Docker 服务未正常启动、权限配置不当或守护进程配置错误引起。需检查服务状态、用户权限、以及 `/etc/docker/daemon.json` 配置是否正确,同时确认是否与 SELinux 或防火墙冲突。如何系统性排查并解决该问题?
  • 写回答

1条回答 默认 最新

  • 祁圆圆 2025-09-01 23:25
    关注

    一、问题现象概述

    在 CentOS 7 系统上安装 Docker 后,执行 docker infodocker run hello-world 时,出现如下错误信息:

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

    该错误表明当前用户无法与 Docker 守护进程(daemon)通信,通常与服务状态、权限配置、SELinux 或守护进程配置相关。

    二、常见原因分析

    • Docker 服务未启动或运行异常
    • 当前用户未加入 docker 用户组,导致权限不足
    • /etc/docker/daemon.json 配置文件存在语法或配置错误
    • SELinux 或防火墙(firewalld)阻止了 Docker 通信
    • 系统资源限制或存储驱动配置错误

    三、排查流程图

    ```mermaid
    graph TD
    A[开始] --> B[检查Docker服务状态]
    B -->|运行正常| C[检查用户权限]
    B -->|未运行| D[启动Docker服务]
    C -->|权限不足| E[将用户加入docker组]
    C -->|权限正常| F[检查SELinux状态]
    F -->|启用| G[临时禁用或配置策略]
    F -->|禁用| H[检查防火墙]
    H -->|阻止| I[开放端口或关闭firewalld]
    H -->|允许| J[检查daemon.json配置]
    J -->|配置错误| K[修复daemon.json]
    J -->|配置正确| L[检查系统资源限制]
    L --> M[排查存储驱动]
    M --> N[完成]
        ```

    四、详细排查与解决方案

    1. 检查并启动 Docker 服务

    执行以下命令查看 Docker 服务状态:

    systemctl status docker

    若服务未运行,尝试启动:

    sudo systemctl start docker

    设置开机自启:

    sudo systemctl enable docker

    2. 检查用户权限

    默认情况下,只有 docker 组的用户可以执行 Docker 命令。将当前用户加入该组:

    sudo usermod -aG docker $USER

    退出当前终端并重新登录以生效组权限。

    3. 检查 SELinux 状态

    SELinux 可能阻止 Docker 守护进程通信。查看当前状态:

    getenforce

    临时禁用 SELinux:

    sudo setenforce 0

    如需永久修改,编辑 /etc/selinux/config 文件:

    SELINUX=permissive

    4. 检查防火墙配置

    查看 firewalld 是否运行:

    systemctl status firewalld

    若运行中,可选择关闭:

    sudo systemctl stop firewalld

    或添加 Docker 端口规则:

    sudo firewall-cmd --permanent --add-port=2375-2376/tcp
    sudo firewall-cmd --reload

    5. 检查 daemon.json 配置文件

    查看 /etc/docker/daemon.json 是否存在语法错误:

    sudo docker info

    若有错误提示,使用 jsonlint 检查:

    sudo jsonlint /etc/docker/daemon.json

    示例正确配置:

    {
      "storage-driver": "overlay2",
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      }
    }

    6. 检查系统资源限制

    查看当前系统资源限制:

    ulimit -a

    /etc/security/limits.conf 中添加:

    * soft nofile 65536
    * hard nofile 65536

    重启系统或重新登录后生效。

    7. 检查存储驱动

    某些存储驱动(如 devicemapper)可能导致兼容性问题。推荐使用 overlay2

    grep ^STORAGE_DRIVER /etc/sysconfig/docker

    若未配置,修改 /etc/docker/daemon.json 添加:

    "storage-driver": "overlay2"

    五、总结性排查步骤表格

    排查项检查命令修复操作
    Docker服务状态systemctl status dockersystemctl start docker
    用户权限groupsusermod -aG docker $USER
    SELinuxgetenforcesetenforce 0 或修改配置
    防火墙systemctl status firewalld关闭或添加端口规则
    daemon.json配置docker info使用 jsonlint 修复
    系统资源限制ulimit -a修改 limits.conf
    存储驱动docker info | grep 'Storage Driver'设置为 overlay2
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 9月1日