docker-compose build命令用于根据docker-compose.yml中build配置自动构建服务镜像,支持简写形式(如build: .)和对象形式(含context、dockerfile、args等),配合--build、--no-cache等参数可灵活控制构建行为。

直接在 docker-compose.yml 中配置 build 属性,就能让 Compose 自动识别并构建镜像——不需要手动写一堆 docker build 命令,也不用记路径和标签。
build 属性的基本写法
最简形式就是 build: .,表示当前目录下找 Dockerfile 构建。更常见的是指定上下文路径,比如:
-
build: ./web→ 在./web目录里找默认的Dockerfile -
build: { context: ./api, dockerfile: Dockerfile.prod }→ 上下文是./api,但用的是同目录下的Dockerfile.prod -
build: { context: ./frontend, dockerfile: ../Dockerfile.dev }→ 上下文只包含./frontend的文件,但Dockerfile可以放在别处(注意:Docker 守护进程实际只收到上下文里的文件)
配合 build-arg 传入构建时变量
很多项目需要在构建阶段区分环境,比如 Node.js 项目传 NODE_ENV,Python 项目传 PIP_INDEX_URL。可以在 docker-compose.yml 里这样写:
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
-
build:context: ./appargs:- NODE_ENV=production- BUILD_DATE=${BUILD_DATE:-$(date -u +%Y-%m-%dT%H:%M:%SZ)}
然后在 Dockerfile 里用 ARG NODE_ENV 和 ENV NODE_ENV=$NODE_ENV 接收。注意:args 是构建时生效,运行时要用 environment 或 env_file。
控制构建行为的关键选项
运行 docker compose build 时,加参数能改变构建逻辑:
-
--no-cache:跳过所有缓存层,适合调试 Dockerfile 或确认构建干净 -
--pull:每次构建都重新拉取FROM的基础镜像,避免本地旧镜像导致安全或兼容问题 -
--parallel:多个服务同时构建(需 Compose v2.20+),大幅缩短多服务项目的构建时间 -
--build-arg KEY=VALUE:命令行覆盖 yml 里定义的args,适合 CI 流水线动态注入版本号、密钥等
build 和 image 共存时的优先级规则
如果一个服务同时写了 build 和 image,Compose 默认会先尝试拉取 image 名称对应的镜像;拉不到才走 build 流程。想强制每次都构建,就加 --build 参数启动:
-
docker compose up --build→ 忽略已有镜像,全部重建再启动 -
docker compose up --build web→ 只重建web服务,其他服务照常使用已有镜像 -
docker compose up --no-build→ 即使有build配置也跳过,只运行已存在的镜像(要求所有镜像必须提前存在)










