前言
在使用 Docker 时,docker compose 是最常用的多容器编排工具。然而很多用户在安装 Docker 后执行 docker compose 或 docker-compose 命令时会遇到 command not found 错误。本文详细分析 Docker Compose V1 和 V2 的差异,并提供三种解决方案:Docker Compose Plugin、alias 别名、Python 版 docker-compose。
1. 问题描述
执行以下命令时出现错误:
$ docker compose up -d
docker: 'compose' is not a docker command. See 'docker --help'.
$ docker-compose up -d
-bash: docker-compose: command not found2. Docker Compose V1 与 V2 的差异
2.1 版本对比
| 特性 | V1 (docker-compose) | V2 (docker compose) |
|---|---|---|
| 实现语言 | Python | Go |
| 命令格式 | docker-compose |
docker compose |
| 安装方式 | 独立二进制文件 | Docker CLI 插件 |
| 维护状态 | 已废弃(EOL) | 活跃维护 |
| 兼容性 | 老项目兼容 | 推荐使用 |
| 性能 | 较慢 | 更快 |
2.2 为什么会出现 "command not found"
- Docker 安装方式不同:部分 Docker 安装方式不包含 Compose 插件
- 系统包管理器版本旧:
apt/yum安装的 docker 可能不包含 compose - V1 已废弃:新版本 Docker 不再默认安装 V1 的
docker-compose - PATH 问题:compose 插件未放在正确路径
3. 解决方案一:安装 Docker Compose Plugin(推荐)
这是官方推荐的方式,将 Compose 作为 Docker CLI 的插件安装。
3.1 使用官方仓库安装(推荐)
Ubuntu / Debian
# 更新软件包索引
apt update
# 安装 Docker Compose 插件
apt install docker-compose-plugin
# 验证安装
docker compose versionCentOS / Rocky / AlmaLinux
# 安装 Docker Compose 插件
yum install docker-compose-plugin
# 或使用 dnf(CentOS 8+)
dnf install docker-compose-plugin
# 验证安装
docker compose version3.2 手动安装 Compose 插件
如果包管理器中没有 docker-compose-plugin,可以手动安装:
# 创建 Docker CLI 插件目录
mkdir -p ~/.docker/cli-plugins
# 下载最新版本的 docker-compose
# 查看最新版本:https://github.com/docker/compose/releases
COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d\" -f4)
echo "最新版本: $COMPOSE_VERSION"
# 下载对应架构的二进制文件
# x86_64 架构
curl -SL "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-linux-x86_64" \
-o ~/.docker/cli-plugins/docker-compose
# ARM64 架构(如树莓派)
curl -SL "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-linux-aarch64" \
-o ~/.docker/cli-plugins/docker-compose
# 赋予执行权限
chmod +x ~/.docker/cli-plugins/docker-compose
# 验证安装
docker compose version3.3 系统级安装(所有用户可用)
# 下载到系统目录(需要 root 权限)
sudo curl -SL "https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64" \
-o /usr/local/lib/docker/cli-plugins/docker-compose
# 或使用 /usr/local/bin
sudo curl -SL "https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64" \
-o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
# 验证
docker compose version3.4 使用官方安装脚本
Docker 官方提供了一个便捷的安装脚本:
# 安装 Docker Compose V2
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64 \
-o $DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose4. 解决方案二:使用 alias 别名
如果只是临时需要或不想安装插件,可以使用 alias 将 docker compose 映射到已安装的 docker-compose:
4.1 先安装 V1 版本 docker-compose
# 下载 docker-compose V1(Python 版本)
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
# 赋予执行权限
chmod +x /usr/local/bin/docker-compose
# 验证
docker-compose version4.2 设置 alias 别名
# 临时设置(当前终端有效)
alias 'docker compose'='docker-compose'
# 永久设置(写入 ~/.bashrc)
echo "alias 'docker compose'='docker-compose'" >> ~/.bashrc
source ~/.bashrc
# 对于 zsh 用户
echo "alias 'docker compose'='docker-compose'" >> ~/.zshrc
source ~/.zshrc验证别名:
$ type 'docker compose'
docker compose is aliased to `docker-compose'
$ docker compose version
docker-compose version 1.29.2, build 5becea4c5. 解决方案三:安装 Python 版 docker-compose(V1)
虽然 V1 已废弃,但在某些老项目中仍可能需要。
5.1 使用 pip 安装
# 安装 Python3 和 pip
apt install python3 python3-pip # Ubuntu/Debian
yum install python3 python3-pip # CentOS/RHEL
# 使用 pip 安装 docker-compose
pip3 install docker-compose
# 验证
docker-compose version5.2 使用 pipx 安装(推荐 Python 方式)
pipx 可以在隔离环境中安装 Python 包,避免依赖冲突:
# 安装 pipx
pip3 install pipx
pipx ensurepath
# 使用 pipx 安装 docker-compose
pipx install docker-compose
# 验证
docker-compose version5.3 国内加速(pip 源)
# 使用清华镜像源
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple docker-compose
# 或使用阿里云镜像
pip3 install -i https://mirrors.aliyun.com/pypi/simple/ docker-compose6. 三种方案对比
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Docker Compose Plugin | 官方推荐,性能最好 | 需要手动安装 | 新项目、生产环境 |
| alias 别名 | 简单快速 | 需要安装 V1 版本 | 临时使用、兼容老命令 |
| Python 版 docker-compose | 兼容老项目 | 已废弃,性能差 | 维护老项目 |
推荐:优先使用 方案一(Docker Compose Plugin),这是官方推荐且持续维护的版本。
7. 验证安装
安装完成后,使用以下命令验证:
# 检查 docker compose 命令
docker compose version
# 应该看到类似输出:
# Docker Compose version v2.24.5
# 测试 compose 功能
mkdir -p /tmp/test-compose
cd /tmp/test-compose
cat > docker-compose.yml <<EOF
version: '3'
services:
nginx:
image: nginx:alpine
ports:
- "8080:80"
EOF
# 启动测试容器
docker compose up -d
# 检查状态
docker compose ps
# 清理测试
docker compose down8. 常见问题排查
8.1 权限拒绝(Permission denied)
# 检查文件权限
ls -l $(which docker-compose)
# 添加执行权限
chmod +x /usr/local/bin/docker-compose
chmod +x ~/.docker/cli-plugins/docker-compose
# 如果仍然报错,检查是否属于 docker 用户组
groups $USER
# 如不在 docker 组,添加用户到 docker 组
usermod -aG docker $USER
# 重新登录或执行
newgrp docker8.2 下载速度慢或超时
# 使用国内镜像加速下载
# 中科大镜像
curl -L "https://mirrors.ustc.edu.cn/docker-ce/linux/static/stable/x86_64/docker-compose-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m)" \
-o /usr/local/bin/docker-compose
# 或手动下载后上传到服务器
# 下载地址:https://github.com/docker/compose/releases8.3 架构不匹配
# 检查系统架构
uname -m
# x86_64 使用:
docker-compose-linux-x86_64
# ARM64 使用:
docker-compose-linux-aarch64
# ARMv7 使用:
docker-compose-linux-armv78.4 docker compose 和 docker-compose 同时存在
# 检查两个命令
which docker-compose
which docker
# 查看 docker compose 插件路径
docker compose version
ls -l ~/.docker/cli-plugins/
ls -l /usr/local/lib/docker/cli-plugins/
# 如果出现冲突,建议保留 V2 版本
rm /usr/local/bin/docker-compose # 删除 V1 版本8.5 仍然报错 "is not a docker command"
# 检查插件路径是否正确
ls -l ~/.docker/cli-plugins/docker-compose
ls -l /usr/local/lib/docker/cli-plugins/docker-compose
# 正确的插件命名:文件名必须是 docker-compose(无后缀)
# 错误的命名:docker-compose.sh, docker-compose-v2 等
# 检查文件是否有执行权限
chmod +x ~/.docker/cli-plugins/docker-compose
# 重启 Docker 服务
systemctl restart docker
# 再试一次
docker compose version9. 快速安装脚本(一键解决)
以下是一个自动检测和安装 Docker Compose 的脚本:
#!/bin/bash
# docker-compose-install.sh
set -e
COMPOSE_VERSION="v2.24.5"
INSTALL_DIR="/usr/local/lib/docker/cli-plugins"
echo "========================================="
echo "Docker Compose 自动安装脚本"
echo "========================================="
# 检查 Docker 是否安装
if ! command -v docker &> /dev/null; then
echo "错误:Docker 未安装,请先安装 Docker"
exit 1
fi
# 检查是否已安装
if docker compose version &> /dev/null; then
echo "Docker Compose 已安装:"
docker compose version
exit 0
fi
echo "正在安装 Docker Compose ${COMPOSE_VERSION}..."
# 创建安装目录
sudo mkdir -p "$INSTALL_DIR"
# 检测架构
ARCH=$(uname -m)
case $ARCH in
x86_64)
ARCH="x86_64"
;;
aarch64|arm64)
ARCH="aarch64"
;;
*)
echo "不支持的架构: $ARCH"
exit 1
;;
esac
# 下载 Docker Compose
sudo curl -SL \
"https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-linux-${ARCH}" \
-o "${INSTALL_DIR}/docker-compose"
# 赋予执行权限
sudo chmod +x "${INSTALL_DIR}/docker-compose"
# 验证安装
echo ""
echo "安装完成!验证版本:"
docker compose version
echo ""
echo "========================================="
echo "Docker Compose 安装成功!"
echo "========================================="使用方法:
# 保存脚本
vim docker-compose-install.sh
# 赋予执行权限
chmod +x docker-compose-install.sh
# 执行安装
./docker-compose-install.sh10. 总结
docker compose 命令不存在的问题主要由以下原因引起:
- Docker 安装时未包含 Compose 插件
- 混淆了 V1 (
docker-compose) 和 V2 (docker compose) - PATH 路径或权限问题
解决方案优先级:
- 首选:安装 Docker Compose Plugin(V2)
- 备选:使用 alias 别名兼容老命令
- 特殊:安装 Python 版(仅维护老项目)
最佳实践:
- 新项目统一使用
docker compose(V2 格式) - 弃用
docker-compose(V1 已废弃) - 将 Compose 插件安装到系统路径,避免权限问题
- 使用国内镜像加速下载