首页/云/云与容器速查/docker compose build 与 pull 控制镜像来源
容器与 Docker106 条

docker compose build 与 pull 控制镜像来源

build 按服务的 build: 段构建镜像(--no-cache 全量重建、--pull 先拉基础镜像);pull 只拉 image: 指定的镜像。CI 里两种来源要分清楚。

云与容器速查云更新于 2026-10-13

compose build 与 pull 是什么

compose build 按服务定义里 build 段的内容构建镜像,compose pull 只拉取 image 段指定的镜像,两者控制的是不同的镜像来源。build 的常用参数有 --no-cache 全量重建、--pull 构建前强制拉取最新基础镜像,指定服务名则只构建该服务。在 CI 里必须分清某个服务是本地构建还是拉取现成镜像,混用会造成『代码改了但跑的还是旧镜像』这类问题。

基本信息

build 行为按 build 段构建;指定服务名则只构建该服务
--no-cache跳过缓存全量重建
--pull构建前强制拉取最新基础镜像
pull 行为只更新 image 指定的镜像,完全不涉及构建
并行能力默认多构建任务并行进行,服务间依赖会自动排序

典型使用场景

  • 本地开发改完代码后重建镜像再启动,确保容器里是新代码
  • CI 中先拉取最新基础镜像再构建,避免底座长期停留在过期版本
  • 基础镜像发布安全补丁后,主动触发一次全量重建
  • 只重建发生变更的服务,缩短流水线的整体耗时
  • 与启动一步到位:用 up -d --build 完成重建与启动,减少操作步骤

使用示例

使用示例
docker compose build --pull web
docker compose build --no-cache
docker compose pull db
docker compose up -d --build
docker compose config --services   # 先确认服务名,避免指定错服务
# 判断改动是否生效:对比镜像 ID 与容器启动时间

命令与作用范围

命令作用对象典型场景
compose buildbuild 段定义的服务代码变更后重建镜像
compose build --pull同上并更新基础镜像基础镜像有安全更新时
compose pullimage 段指定的镜像第三方组件版本升级
compose up -d --build构建后启动一体化部署脚本
compose up -d直接使用已有镜像只改了启动参数或环境变量
镜像标签写成 latest 时,pull 得到的结果不可预期:生产环境应固定版本标签,让升级动作显式、可回退、可复现。
执行 pull 并不等于部署完成:镜像更新后必须重建容器才会生效,只拉镜像不重建,改动看起来完全没有作用。

易错点

  • 把 pull 当成部署动作:镜像更新了但容器没重建,改动没有生效
  • 基础镜像长期不刷新,构建永远基于旧底座,安全修复始终进不来
  • 改了代码只执行 up -d 而没有加 --build,容器继续跑旧镜像,反复怀疑代码问题
  • 在错误的目录或项目下执行构建,构建结果与预期服务对不上

数据来源与参考

  • Docker Docs:docker compose build
  • Docker Docs:docker compose pull

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌