不推荐使用 docker-compose create 命令,它自 v2.0 起被废弃、v2.20+ 完全移除,因功能冗余且维护成本高;官方唯一替代方案是 docker-compose up --no-start,可完成镜像拉取/构建、网络卷创建及容器生成但不启动。

现在不推荐使用 docker-compose create 命令,它已在较新版本中被正式弃用。官方明确建议改用 docker-compose up --no-start 替代。
为什么 create 命令不再可用
该命令自 Docker Compose v2.0 起逐步标记为废弃,到 v2.20+ 版本已完全移除。Docker 官方文档和 CLI help 输出中均不再列出 create,执行时会提示 “unknown command” 或直接报错。
- 根本原因:功能冗余 ——
up --no-start已能完整覆盖其行为(拉取/构建镜像、创建网络与卷、生成容器但不启动) - 维护简化:减少命令分支,统一生命周期管理入口(
up/down作为核心组合) - 语义更清晰:“up” 表示服务就绪态,“--no-start” 显式表达“准备就绪但暂不运行”,比隐晦的 “create” 更符合直觉
替代方案:用 up --no-start 预创建容器
这是当前唯一标准、稳定且向后兼容的方式。它会完成所有初始化步骤,只跳过 start 动作:
-
基础用法:
docker-compose up --no-start—— 为 docker-compose.yml 中所有服务创建容器 -
指定服务:
docker-compose up --no-start web db—— 仅预创建 web 和 db 两个服务的容器 -
强制重建:
docker-compose up --no-start --build—— 构建镜像后再创建容器(适用于本地 Dockerfile 变更后) -
验证是否成功:运行
docker-compose ps,状态列显示Created即表示容器已生成但未运行
预创建后的常见操作
容器处于 Created 状态后,你可以安全执行检查或干预,再决定是否启动:
-
查看容器配置细节:
docker inspect <container_id>检查挂载路径、网络设置、环境变量等是否符合预期 -
进入容器临时调试(仅限已创建未启动的容器):不支持直接
exec;需先docker-compose start <service>启动,再docker-compose exec,或改用run启动一次性调试容器 -
批量启动部分服务:
docker-compose start web—— 仅启动 web 容器,db 仍保持 Created 状态 -
清理未启动容器:
docker-compose down会一并删除所有已创建但未运行的容器,无需额外 rm
注意事项与典型场景
预创建不是常规流程,仅在特定运维需求下使用:
- 部署前做最终一致性校验(如确认卷挂载路径存在、端口未被占用、镜像 SHA 匹配)
- 灰度发布中,先创建新版本容器,待健康检查通过后再滚动替换旧容器
- CI/CD 流水线中分离“构建准备”与“上线执行”阶段,提升可控性与回滚能力
- 注意:若 compose 文件中定义了
depends_on,--no-start不会触发依赖等待逻辑,它只管创建,不处理启动顺序


















