Skip to content

Docker 连接拒绝错误:原因与解决方案

问题描述

当使用 docker-compose up 命令时,可能会遇到以下连接错误:

docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', ConnectionRefusedError(61, 'Connection refused'))

这个错误表明 Docker 客户端无法连接到 Docker 守护进程。这是一个常见问题,可能由多种原因引起。

解决方案汇总

1. 检查 Docker 服务状态

首先确保 Docker 服务正在运行:

bash
# 检查 Docker 服务状态
sudo systemctl status docker

# 如果未运行,启动 Docker 服务
sudo systemctl start docker

# 设置 Docker 服务开机自启
sudo systemctl enable docker

TIP

对于不同系统,启动命令可能略有不同:

  • sudo service docker start
  • sudo /etc/init.d/docker restart

2. 添加用户到 Docker 组(Linux/Mac)

最常见的原因是当前用户没有访问 Docker 套接字的权限:

bash
# 创建 docker 组(如果不存在)
sudo groupadd docker

# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER

# 应用组变更(需要重新登录或使用以下命令)
newgrp docker

重要

添加用户到 docker 组后,需要完全注销并重新登录,或者重启系统,才能使组变更生效。

3. 调整 Docker 套接字权限

临时解决方案是修改 Docker 套接字的权限:

bash
# 给予其他用户读写权限
sudo chmod o+rw /var/run/docker.sock

# 或者更宽松的权限设置
sudo chmod 666 /var/run/docker.sock

注意

这种方法虽然有效,但存在安全风险,不建议在生产环境中使用。

4. 使用 sudo 权限运行

最简单的临时解决方案是使用 sudo:

bash
sudo docker-compose up

5. 检查 Docker 上下文

如果使用了多个 Docker 环境,可能需要检查当前上下文:

bash
# 列出所有上下文
docker context list

# 切换到默认上下文
docker context use default

6. WSL 用户特别提示

Windows WSL 用户需要确保:

  1. Docker Desktop 设置中已启用 WSL 集成
  2. 重启 Docker Desktop 应用更改

7. 版本兼容性问题

某些 Docker Desktop 版本可能存在兼容性问题,可以尝试:

  1. 降级到稳定版本
  2. 检查官方发布说明中的已知问题

验证解决方案

完成上述任一解决方案后,使用以下命令验证:

bash
# 检查 Docker 守护进程是否可访问
docker ps

# 或尝试运行简单容器
docker run hello-world

根本原因分析

这个错误的核心原因是 Docker 客户端无法通过 Unix 套接字 /var/run/docker.sock 与 Docker 守护进程通信,通常是由于:

  1. 权限不足:当前用户没有访问 Docker 套接字的权限
  2. 服务未运行:Docker 守护进程没有启动
  3. 环境配置问题:Docker 上下文或环境变量配置错误

最佳实践建议

  1. 生产环境:始终通过将用户添加到 docker 组来解决权限问题
  2. 安全考虑:避免使用过宽的权限设置(如 chmod 666)
  3. 系统管理:确保 Docker 服务设置为开机自启
  4. 多环境管理:正确管理 Docker 上下文,特别是在使用远程 Docker 主机时

遵循这些解决方案,您应该能够解决 Docker 连接拒绝错误并顺利运行 docker-compose up 命令。