docker build 参数组合是什么
docker build 的常用参数组合解决四类问题:用 --build-arg 改构建期参数(镜像源、版本号);用 --target 只构建到某个中间阶段,便于调试多阶段构建中出问题的环节;用 --no-cache 强制全量重建,排除缓存污染;用 -f 指定非默认位置的 Dockerfile。加上 --platform 与 buildx,还能构建与推送多架构镜像。
基本信息
| --build-arg | 向 Dockerfile 中的 ARG 传值,可重复出现 |
|---|---|
| --target | 只构建到指定阶段,用于定位中间层问题 |
| --no-cache | 忽略构建缓存全量重建,怀疑缓存污染时使用 |
| -f | 指定 Dockerfile 路径,默认取上下文根目录下的 Dockerfile |
| --platform | 指定目标平台;多架构镜像需要 buildx |
典型使用场景
- 内网构建时指定私有镜像源与代理参数,避免依赖公网
- 多阶段构建调试:只构建到 build 阶段,验证依赖安装是否成功
- 依赖版本更新后强制重建,排除缓存导致的『改了没生效』
- 多 Dockerfile 仓库(开发与生产各一份)用 -f 显式指定
- 跨平台交付:在 x86 构建机上产出 arm64 镜像供边缘设备使用
典型组合
典型组合
docker build \
--build-arg NPM_REGISTRY=https://registry.npmmirror.com \
--target build \
--no-cache \
-t app:dev \
-f docker/Dockerfile .
# 多架构构建(需要 buildx 与对应 builder)
docker buildx build --platform linux/amd64,linux/arm64 -t app:1.0 --push .参数与适用时机
| 参数 | 解决什么问题 | 注意 |
|---|---|---|
| --build-arg | 构建期变量取值不同 | 值会出现在构建历史中,不放密钥 |
| --target | 只想构建到中间阶段 | 阶段名必须与 Dockerfile 一致 |
| --no-cache | 怀疑缓存污染或依赖更新 | 重建耗时更长,CI 中按需使用 |
| -f | Dockerfile 不在上下文根目录 | Dockerfile 只能引用上下文内的文件 |
| --platform | 构建非本机架构镜像 | 需要 buildx,跨架构构建更慢 |
上下文是命令最后那个参数(通常是 .):上下文会被打包发送给构建引擎,过大或包含 .git、node_modules 会让构建明显变慢,用 .dockerignore 收敛。
--build-arg 传入的敏感值会留存在构建历史中,CI 日志与镜像元数据都可能暴露;密码与令牌应改用 BuildKit 的 --secret 挂载,不要走构建参数。
构建缓存是按指令文本与上下文内容计算的:命令行参数或文件内容发生变化,相关层就会重建。排查『改了却没生效』时先确认缓存是否命中,再怀疑代码本身。