首页/云/Docker 容器速查/docker compose build 构建服务镜像
Compose 编排55 条

docker compose build 构建服务镜像

按 compose 文件里 build 节构建服务镜像:可指定服务、--no-cache 全量重建、--pull 拉取新基础镜像、透传 build-arg。

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

docker compose build 是什么

compose build 按编排文件里服务的 build 节构建镜像,把构建与启动分成两步。它支持指定服务、强制不使用缓存、构建前刷新基础镜像,并把构建参数透传给 Dockerfile。理解要点在分工:build 只负责产出镜像,不会重启已经在跑的容器;要让运行中的服务换上新镜像,仍需执行 up。

基本信息

语法docker compose build [服务…] [--no-cache] [--pull] [--build-arg K=V]
构建定义服务下的 build 节:context、dockerfile、args、target、platforms
关联命令docker compose up --build 边构建边启动
镜像命名服务同时写 image 与 build 时,构建产物按 image 命名
仅写 image没有 build 节的服务不受 build 命令影响
缓存控制支持通过编排文件配置缓存导入导出相关选项

典型使用场景

  • 本地修改代码后重建服务镜像并重启
  • 发布前统一构建多个服务,再一起启动
  • 排查依赖异常:--no-cache 全量重建排除缓存干扰
  • 跟进基础镜像安全更新:--pull 拉取新底座再构建
  • 用 --build-arg 为不同环境注入版本号或仓库地址

编排文件与构建命令

编排文件与构建命令
services:
  web:
    build:
      context: ./web
      dockerfile: Dockerfile
      target: runtime              # 多阶段构建指定目标阶段
      args:
        APP_VERSION: ${TAG:-dev}
    image: app/web:${TAG:-dev}     # 构建产物按这个名字入库

常用构建动作

常用构建动作
# 构建全部服务
docker compose build

# 只构建某个服务,全量重建排除缓存干扰
docker compose build --no-cache web

# 构建前刷新基础镜像,顺带拿到上游安全修复
docker compose build --pull web

# 透传构建参数(不写进文件,适合临时验证)
docker compose build --build-arg VERSION=1.4.3 api

# 构建完成后让运行中的服务用上新镜像
docker compose up -d --no-deps web

常用选项

选项作用适用时机
服务名只构建指定服务单服务迭代
--no-cache忽略全部缓存依赖或基础镜像疑似异常
--pull先拉取基础镜像例行安全更新
--build-arg透传构建参数临时覆盖版本号
--progress设置日志形式CI 留存完整日志
up --build构建后立即启动一体化部署流程
build 与 up 分离是有意设计的:先在构建阶段确认镜像产物无误,再决定何时切换运行实例,避免构建失败直接导致服务中断。
只有 image 没有 build 的服务,compose build 会直接跳过;想让这类服务换版本,应改为拉取新标签或补上 build 节。

易错点

  • --no-cache 是全量重建,多服务项目耗时明显上升,只在依赖或基础镜像疑似异常时使用
  • build 不会自动重启已运行容器,构建完仍需 up -d 才会用上新镜像,别把这两步当成一步
  • build 节里写死镜像标签而 image 节用的变量不同,构建产物名字与预期不符,拉取时找不到
  • 在编排文件里用构建参数透传密钥,构建历史与日志中可能留下痕迹,敏感值应走运行时注入

数据来源与参考

  • Docker 官方 CLI 参考:docker compose build(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌