windows Docker Compose安装教程

文章导读
在 Windows 上装 Docker Compose,通常不是去下一个叫 Compose 的安装包,而是装 Docker Desktop,并确认 docker compose 这个插件能跑起来。Compose 本身是个客户端,必须连上一个能用的 Docker 引擎;Windows 上的引擎基本来自 Docker Desktop(WSL2 或 Hyper-V 后端)。只有当你已经有引擎、又不想装
📋 目录
  1. 壹 Docker Compose安装之前先确认这三件事
  2. 贰 Docker Compose安装:最短可用路径
  3. 叁 Docker Compose安装:一个真实场景的完整做法
  4. 肆 Docker Compose安装:跑不通先查这三处
A A

在 Windows 上装 Docker Compose,通常不是去下一个叫 Compose 的安装包,而是装 Docker Desktop,并确认 docker compose 这个插件能跑起来。Compose 本身是个客户端,必须连上一个能用的 Docker 引擎;Windows 上的引擎基本来自 Docker Desktop(WSL2 或 Hyper-V 后端)。只有当你已经有引擎、又不想装 Desktop 时,才需要考虑单独往 CLI 插件目录放二进制。所以判断顺序应该是:先看 Windows 和虚拟化是否达标,再看引擎有没有起来,最后才验证 Compose 版本。

能跑通的最低条件是三件事同时成立:Windows 版本与虚拟化满足 Docker Desktop 要求、Docker 引擎已启动且 docker version 能返回 Server 段、CLI 插件目录里有 compose 插件。缺任何一项,后面的 docker compose up 都会失败,但报错往往指向别处。版本号请以本机 docker compose version 输出为准,安装包版本会变,下载页上的数字需要自己核对。

Docker Compose安装之前先确认这三件事

第一件是系统版本和虚拟化。在 PowerShell 里执行 winver 看 Windows 版本;打开任务管理器 →「性能」→「CPU」,右下角看「虚拟化」是否为「已启用」。如果显示已禁用,需要进 BIOS/UEFI 打开。Windows 家庭版没有 Hyper-V,只能用 WSL2 后端,这一点在安装前就要确认,否则装完启动会卡在引擎初始化。

第二件是权限和引擎状态。执行 docker version,输出里应该同时出现 Client 和 Server 两段;只有 Client 一段,说明引擎没起来,问题不在 Compose。权限方面,Docker Desktop 安装时会创建本地组 docker-users,用 net localgroup docker-users 查看当前用户是否在列表里;不在的话需要管理员把账户加进去再重新登录。用 WSL2 后端时,还要在 Docker Desktop 的 Settings → Resources → WSL Integration 里,把你要用的那个发行版开关打开。

第三件是入口位置。Compose 作为 CLI 插件存在,用户级目录是 %USERPROFILE%\.docker\cli-plugins,系统级目录是 C:\Program Files\Docker\cli-plugins。先在 PowerShell 里跑 docker compose version,能打出 Docker Compose version v2.x.x 就说明入口正常;如果提示未知命令,再去看这两个目录里有没有 docker-compose.exe。

windows Docker Compose安装教程

Docker Compose安装:最短可用路径

按下面的顺序做,四步之内能跑通,每步都要看到对应输出再往下走。

  1. 安装 Docker Desktop。下载安装包后双击,安装向导里勾选「Use WSL 2 based engine」(家庭版没有别的选项)。安装完成提示重启就重启。这一步做完该看到:开始菜单里有 Docker Desktop,托盘出现鲸鱼图标。
  2. 启动 Docker Desktop,等待托盘鲸鱼图标不再闪烁、状态显示 Engine running。首次启动可能要求接受协议或登录账号,登录不是必需,可以跳过。这一步做完该看到:窗口底部显示引擎已运行。
  3. 验证引擎。在 PowerShell 执行:
    docker run --rm hello-world
    该看到一段「Hello from Docker!」的欢迎输出,说明引擎和镜像拉取链路都正常。
  4. 验证 Compose 插件。
    docker compose version
    docker compose ls
    第一条应输出 v2 版本号,第二条应输出表头 NAME / STATUS / CONFIG FILES,即使没有项目也只有表头。

四步都过了,就不要再单独去装 docker-compose 老版本。旧版 v1 和现在的 v2 命令写法不同,两套同时存在会互相干扰。

Docker Compose安装:一个真实场景的完整做法

场景是这样的:本机要做一个订单查询的联调环境,需要 MySQL 8 装一张约 30 万行的订单表(CSV 约 60MB),再配一个 Web 版数据库客户端方便看结果。项目目录定为 D:\work\order-demo,初始数据脚本放在 D:\work\order-demo\init\orders.sql。

在项目根目录新建 compose.yaml(也可以叫 docker-compose.yml,两种名字 v2 都认),内容如下。ports 故意用 13306 和 18080,是为了避开本机可能已经占用的 3306 和 8080:

windows Docker Compose安装教程
services:
  mysql:
    image: mysql:8.0
    container_name: order-mysql
    ports:
      - "13306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root123456
      MYSQL_DATABASE: order_demo
    volumes:
      - ./mysql-data:/var/lib/mysql
      - ./init:/docker-entrypoint-initdb.d:ro
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-uroot", "-proot123456"]
      interval: 10s
      timeout: 5s
      retries: 10
    restart: unless-stopped

  adminer:
    image: adminer:4
    container_name: order-adminer
    ports:
      - "18080:8080"
    depends_on:
      mysql:
        condition: service_healthy

在 PowerShell 里进入该目录并启动:

cd D:\work\order-demo
docker compose up -d
docker compose ps

docker compose ps 里 mysql 的状态应先显示 starting,健康检查通过后变为 healthy;adminer 因为写了 depends_on ... service_healthy,会等 mysql 健康后才启动。随后浏览器打开 http://localhost:18080,System 选 MySQL,Server 填 mysql(同一网络里用服务名,不是 localhost),用户名 root,密码 root123456,库选 order_demo,能看到 orders 表即算跑通。

两个配置项要留意:./mysql-data 是相对路径,建议保持相对写法,不要在 YAML 里写 D:\work\... 这种反斜杠绝对路径;./init 挂到 /docker-entrypoint-initdb.d 后,SQL 只在数据目录为空时首次执行一次,想重跑初始化必须先 docker compose down 再删掉 mysql-data 目录。

windows Docker Compose安装教程

Docker Compose安装:跑不通先查这三处

卡点一:命令找不到。报错原文通常是:docker-compose : 无法将“docker-compose”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。这是把 v1 和 v2 的写法混了。检查位置:执行 docker compose version(中间有空格)。若仍报未知命令,去 %USERPROFILE%\.docker\cli-plugins 和 C:\Program Files\Docker\cli-plugins 看是否有 docker-compose.exe,以及 where.exe docker 指向的是不是你装的那个 Docker Desktop。

卡点二:引擎没起来。报错常见为 error during connect: ... The system cannot find the file specified 或 Cannot connect to the Docker daemon at npipe:////./pipe/dockerDesktopLinuxEngine。这不是 Compose 的问题,是 Docker Desktop 没启动或 WSL 发行版没跑起来。检查位置:托盘鲸鱼图标是否有红点,Settings → General 里是否勾了 WSL2 引擎,PowerShell 执行 wsl -l -v 看发行版 STATE 是否为 Running。必要时 wsl --shutdown 后重启 Docker Desktop。

卡点三:端口被占。报错原文形如 Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> ... bind: Only one usage of each socket address。检查位置:netstat -ano | findstr :3306 拿到 PID,再到任务管理器「详细信息」里按 PID 找进程。确认是本机已有 MySQL 在跑,就把 compose.yaml 里的宿主机端口改成 13306 之类,容器内端口 3306 不用动。