最稳方式是下载官方预编译二进制文件:执行sudo curl -l "https://github.com/docker/compose/releases/download/v2.29.7/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose,再sudo chmod +x /usr/local/bin/docker-compose,最后验证docker compose version。

docker compose install:用官方二进制包,别碰 pip
Linux 下安装 docker compose(注意不是旧版 docker-compose),最稳的方式是直接下载官方预编译的二进制文件。用 pip install docker-compose 容易出问题——它装的是旧 Python 版本下的 docker-compose(v1),而新版 docker compose(v2)是 Go 写的独立二进制,和 Docker CLI 深度集成,docker compose up 才是当前标准用法。
实操建议:
- 先确认 Docker CLI 已安装且能运行:
docker --version输出应含Docker version 24.x或更高 - 执行命令下载最新稳定版(截至 2026 年 9 月为 v2.29.x):
sudo curl -L "https://github.com/docker/compose/releases/download/v2.29.7/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- 加执行权限:
sudo chmod +x /usr/local/bin/docker-compose - 验证:
docker compose version(注意中间是空格,不是连字符)
docker compose 配置文件路径:别硬塞进 /etc,用 ~/.docker 目录
很多人以为 docker compose 像 systemd 那样读取全局配置,其实它默认不读任何配置文件——所有行为由 docker-compose.yml(或 compose.yaml)声明,CLI 参数控制启动方式。但有一个例外:~/.docker/config.json 会影响登录态、镜像拉取行为,比如你用国内镜像源,就得在这里配 registry-mirrors。
常见错误现象:
-
docker compose up报错failed to solve: failed to authorize: failed to fetch anonymous token—— 实际是没登录私有 registry,但错误信息误导人 - 拉镜像极慢,
docker pull正常,但docker compose up卡住 —— 很可能~/.docker/config.json里没配 registry mirror,而 compose 默认不继承 shell 的DOCKER_CONFIG环境变量
正确做法:
- 确保
~/.docker/config.json存在且包含国内镜像源,例如:{ "auths": {}, "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] } - 如果用 root 运行
docker compose up -d,记得也配置/root/.docker/config.json,否则 root 用户无镜像加速
docker compose up 启动失败:先看容器日志,别急着删卷
执行 docker compose up 后服务退出或报错,第一反应不该是删容器、删 volume,而是查日志。因为 compose 启动失败通常不是“没起来”,而是“起来又崩了”——比如 MySQL 初始化失败、Redis 配置挂载权限不对、环境变量拼写错误导致应用 panic。
实操建议:
- 加
-d后再查日志:docker compose logs -f service-name(service-name 来自compose.yaml中的 key) - 如果服务反复重启,用
docker compose ps看 STATUS 列是否显示Restarting (1)或Exited (137)(OOM 被杀) - 别直接
docker volume rm—— 数据卷删除不可逆;先docker volume inspect vol-name确认挂载路径,再决定是否清理 - Windows WSL 用户注意:
./data这类相对路径在 compose 文件中,实际挂载到 WSL 的/home/xxx/project/data,不是 Windows 的C:\...,路径写错会导致空目录挂载,服务找不到配置或数据
Ubuntu 22.04 上 docker compose 与 systemd 集成:别用 systemctl enable docker-compose
有人想让 docker compose up -d 开机自启,就去写 systemd service,还试图 systemctl enable docker-compose。这是错的——docker compose 本身不是守护进程,它是 CLI 工具;真正要托管的是容器,不是 compose 命令。
更合理、更轻量的做法是用 Docker 自带的 restart policy:
- 在
compose.yaml的每个 service 下加:restart: unless-stopped
- 然后只运行一次:
docker compose up -d - Docker daemon 会自动在宿主机重启后拉起这些容器,无需额外 systemd 单元
- 若真需要精细控制(比如等网络就绪后再启动),才考虑写 systemd service,但必须设置
After=docker.service和Type=oneshot,并用ExecStart=/usr/bin/docker compose -f /path/to/compose.yaml up -d
复杂点在于:compose 文件里写的 depends_on 只控制启动顺序,不等待依赖服务“就绪”(比如 MySQL 完成初始化)。这个逻辑得靠应用层健康检查或自定义脚本兜底,Docker 本身不解决。











