Docker Compose dry-run 怎样预览服务启动会执行哪些操作
如果你想先知道 Docker Compose 启动项目会拉取什么、构建什么、创建哪些容器,可以把原命令前面加上 --dry-run。例如,docker compose --dry-run up --build -d 会输出一次预览计划,展示 pull、build、创建网络、创建容器、等待健康检查和启动等动作,但不会真的改变 Compose 栈状态。
官方地址:https://docs.docker.com/reference/cli/docker/compose/
--dry-run应该放在docker compose后面,后面的up、--build、-d和服务名保持真实执行时的写法。- 输出里的
DRY-RUN MODE表示动作被模拟,不能把它当成容器已经创建或启动。 ps、ls、logs本身是查询命令,不适合用 dry-run;需要查看它们时直接运行对应查询命令。
一、先判断命令是否值得预览
dry-run 的目标是提前查看会改变 Compose 栈的动作。最适合预览的是 up、pull、build、create 等命令,因为它们可能拉取镜像、构建镜像或创建容器。把这些动作提前展开,能在执行前发现服务范围过大、构建步骤不符合预期或依赖服务会被一并拉起等问题。
相反,ps、ls 和 logs 用来读取已经存在的项目、容器或日志状态,它们不负责改变栈状态。Docker 官方文档明确说明 dry-run 不能用于这类查询命令,所以不要为了统一格式给所有 Compose 命令都加上这个参数。

二、把真实启动参数原样放进预览命令
在 compose.yaml 所在目录执行命令。需要构建镜像时保留 --build,需要后台启动时保留 -d;如果只想预览某一个服务,也可以在命令末尾写服务名。这样得到的计划才和后面真正执行的动作一致。
# 进入包含 compose.yaml 的项目目录,避免读到其他项目的配置 cd ./compose-demo # 只预览拉取、构建、创建和启动计划,不改变当前栈状态 docker compose --dry-run up --build -d # 只预览 web 服务及其启动动作,保留真实执行时的服务范围 docker compose --dry-run up --build -d web
如果项目使用了多个 Compose 文件,继续按真实启动时的顺序传入 -f;如果需要指定环境文件,也把 --env-file 一起保留。预览命令不是新的配置解析器,它仍然读取你给出的项目文件和参数。
# 先指定基础文件,再指定覆盖文件;顺序会影响最终配置 docker compose --dry-run \ -f compose.yaml \ -f compose.dev.yaml \ --env-file .env.dev \ up --build -d
三、按输出顺序读懂动作计划
预览输出通常会用 DRY-RUN MODE 标记每个动作。阅读时不要只看最后一行,而要从资源准备到服务启动按顺序看一遍。一个包含数据库、后端和代理的项目,常见顺序是先拉取镜像,再构建需要本地 Dockerfile 的服务,然后创建网络与容器,等待数据库健康,最后启动依赖它的服务。

# 预览完整启动计划,输出中的每一项都只表示计划动作 docker compose --dry-run up --build -d # 需要更容易复制到日志系统时,关闭彩色控制字符 docker compose --ansi never --dry-run up --build -d
看到 healthy 后才出现依赖服务的 start,通常说明 Compose 正在遵守健康检查条件;看到 Created 或 Started 时仍要记住这是模拟输出。dry-run 的价值是告诉你将会发生什么,不是替你完成资源创建。
四、用预览结果决定是否真的执行
可以把预览结果按三层快速核对:第一层看服务范围,确认没有误把数据库、代理或测试服务一起纳入;第二层看资源动作,确认 pull、build、create 是否符合当前环境;第三层看依赖关系,确认等待健康检查的服务不会因为启动顺序不对而失败。
# 预览通过后,去掉 --dry-run 才会真正创建或启动资源 docker compose up --build -d # 如果只是想查看当前容器,不要使用 dry-run,直接查询状态 docker compose ps # 如果只是想看服务日志,也直接读取日志输出 docker compose logs --tail=100 web
预览和执行之间如果修改了 Compose 文件、环境变量或镜像构建内容,应重新做一次 dry-run。否则你确认的是旧计划,真正执行的却是另一份配置。
常见误区
| 现象 | 原因 | 处理方式 |
|---|---|---|
| 输出里出现了 Created,但本机没有新容器 | 这是 dry-run 的模拟结果 | 去掉 --dry-run 后再执行真实命令 |
给 logs 加 dry-run 报错 | 日志查询不改变栈状态 | 直接运行 docker compose logs |
| 预览的服务比预期多 | 真实命令包含了全部服务或依赖服务 | 检查命令末尾的服务名、依赖关系和 Compose 文件参数 |
| 预览顺序和执行结果不一致 | 预览后又改了配置或环境变量 | 用最终配置重新执行一次 dry-run |
相关问题
dry-run 会拉取镜像或创建容器吗?
不会。它展示 Compose 计划执行的动作,但不会把这些状态变更真正应用到栈上。
可以只预览一个服务吗?
可以。在 up 后面写服务名,例如 docker compose --dry-run up -d web,但仍要留意该服务的依赖可能进入计划。
dry-run 和 docker compose config 有什么区别?
config 用来解析、合并并渲染 Compose 配置;dry-run 用来预览会改变栈状态的命令。前者回答“最终配置是什么”,后者回答“执行命令将做什么”。
GitHub Pull Request 怎样设置必需评审人
- 上一篇
- GitHub Pull Request 怎样设置必需评审人
- 下一篇
- VS Code 怎样为工作区配置独立环境变量
-
- 文章 · 软件教程 | 45分钟前 |
- VS Code 怎样为工作区配置独立环境变量
- 480浏览 收藏
-
- 文章 · 软件教程 | 48分钟前 | github · GitHub Pull Request CODEOWNERS 必需评审人
- GitHub Pull Request 怎样设置必需评审人
- 188浏览 收藏
-
- 文章 · 软件教程 | 51分钟前 |
- VS Code 任务怎样把编译错误映射到编辑器问题面板
- 284浏览 收藏
-
- 文章 · 软件教程 | 53分钟前 | 开发环境 · docker · Docker Compose volumes 只读挂载 read_only
- Docker Compose 怎样为开发服务挂载只读目录
- 287浏览 收藏
-
- 文章 · 软件教程 | 53分钟前 |
- GitHub Codespaces 怎样固定项目的开发容器配置
- 422浏览 收藏
-
- 文章 · 软件教程 | 55分钟前 |
- JetBrains IDE 怎样只重排当前文件的导入顺序
- 482浏览 收藏
-
- 文章 · 软件教程 | 56分钟前 |
- Docker Compose 怎样查看多个配置文件合并后的最终配置
- 353浏览 收藏
-
- 文章 · 软件教程 | 1小时前 |
- GitHub Issues 怎样用表单收集结构化信息
- 150浏览 收藏
-
- 文章 · 软件教程 | 1小时前 |
- VS Code 多光标怎样批量修改同一列文本
- 460浏览 收藏
-
- 文章 · 软件教程 | 1小时前 |
- VS Code 怎样为工作区设置默认终端配置文件
- 161浏览 收藏
-
- 文章 · 软件教程 | 8小时前 |
- VS Code 用户代码片段按文件名模式限定展开范围
- 270浏览 收藏
-
- 文章 · 软件教程 | 15小时前 |
- Actions concurrency 怎样取消旧工作流
- 465浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 693次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 706次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 774次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 734次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 568次使用
-
- golang进程内存控制避免docker内oom
- 2022-12-22 160浏览
-
- golang进程在docker中OOM后hang住问题解析
- 2022-12-22 105浏览
-
- 多阶段构建优化Go 程序Docker镜像
- 2022-12-23 420浏览
-
- 构建Golang应用最小Docker镜像的实现
- 2023-01-07 276浏览
-
- golang实现对docker容器心跳监控功能
- 2022-12-24 175浏览

