docker compose报错docker: unknown command: docker compose

Windows Docker Compose 命令兼容问题总结

背景

在 Windows 环境中,项目或脚本需要使用新版 Docker Compose 命令:

powershell 复制代码
docker compose ...

但当前机器原本只能使用旧式命令:

powershell 复制代码
docker-compose ...

两者的区别是:

  • 旧式命令:docker-compose,中间有短横线,是一个独立可执行文件。
  • 新式命令:docker compose,中间是空格,是 Docker CLI 的子命令插件形式。

现象

执行新版命令时失败:

powershell 复制代码
docker compose version

报错:

text 复制代码
docker: unknown command: docker compose

Run 'docker --help' for more information

说明当前 Docker CLI 没有识别到 Compose 插件。

同时,旧式命令可以正常工作:

powershell 复制代码
docker-compose version

输出:

text 复制代码
Docker Compose version v5.1.4

这说明 Compose 本体已经安装,只是没有被 Docker CLI 作为 docker compose 插件发现。

环境检查结果

当前机器上的 Docker 命令位置:

text 复制代码
D:\defaultInstall\Docker\Docker\resources\bin\docker.exe

当前机器上的旧式 Compose 命令位置:

text 复制代码
D:\defaultInstall\Docker\Docker\resources\bin\docker-compose.exe

用户级 Docker CLI 插件目录为:

text 复制代码
C:\Users\GhostShip\.docker\cli-plugins

解决方案

将已有的 docker-compose.exe 复制到 Docker CLI 插件目录,并命名为 docker-compose.exe

powershell 复制代码
New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\.docker\cli-plugins" | Out-Null
Copy-Item -Force `
  -LiteralPath 'D:\defaultInstall\Docker\Docker\resources\bin\docker-compose.exe' `
  -Destination "$env:USERPROFILE\.docker\cli-plugins\docker-compose.exe"

复制完成后,文件位置为:

text 复制代码
C:\Users\GhostShip\.docker\cli-plugins\docker-compose.exe

验证结果

重新执行:

powershell 复制代码
docker compose version

输出:

text 复制代码
Docker Compose version v5.1.4

再执行:

powershell 复制代码
docker compose --help

可以正常显示 Compose 子命令帮助信息,例如:

text 复制代码
Usage:  docker compose [OPTIONS] COMMAND

Define and run multi-container applications with Docker

最终状态

现在以下新版命令已经可以正常使用:

powershell 复制代码
docker compose version
docker compose up
docker compose up -d
docker compose down
docker compose logs
docker compose ps

原因总结

本次问题不是 Docker Compose 没安装,而是 Docker CLI 没有在插件目录中找到 Compose 插件。

旧式 docker-compose.exe 已存在并且可用,但 Docker CLI 的 docker compose 机制需要插件文件位于约定目录,例如:

text 复制代码
%USERPROFILE%\.docker\cli-plugins\docker-compose.exe

将现有可用的 docker-compose.exe 复制到该目录后,Docker CLI 就能识别 docker compose 命令。

注意事项

如果在新的终端窗口中仍然无法识别,可以尝试:

  1. 关闭并重新打开 PowerShell 或 Windows Terminal。
  2. 重新执行:
powershell 复制代码
docker compose version
  1. 确认插件文件存在:
powershell 复制代码
Get-Item "$env:USERPROFILE\.docker\cli-plugins\docker-compose.exe"