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 命令。
注意事项
如果在新的终端窗口中仍然无法识别,可以尝试:
- 关闭并重新打开 PowerShell 或 Windows Terminal。
- 重新执行:
powershell
docker compose version
- 确认插件文件存在:
powershell
Get-Item "$env:USERPROFILE\.docker\cli-plugins\docker-compose.exe"