7.7 ARG 构建参数
7.7.1 基本语法
ARG <参数名>[=<默认值>]ARG 指令定义构建时的变量,可以在 docker build 时通过 --build-arg 传入。
7.7.2 ARG vs ENV
特性
ARG
ENV
生效时间
仅构建时
构建时 + 运行时
持久性
构建后消失
写入镜像
覆盖方式
docker build --build-arg
docker run -e
适用场景
构建参数(版本号等)
应用配置
可见性
docker history 可见
docker inspect 可见
构建时 运行时
├─ ARG VERSION=1.0 │ (ARG 已消失)
├─ ENV APP_ENV=prod │ APP_ENV=prod(仍存在)
└─ RUN echo $VERSION │⚠️ 安全提示:不要用 ARG 传递密码等敏感信息,
docker history可以查看所有 ARG 值。
7.7.3 基本用法
定义和使用
构建时覆盖
7.7.4 ARG 的作用域
FROM 之前的 ARG
FROM 之后重新声明
多阶段构建中的 ARG
7.7.5 常见使用场景
1. 控制基础镜像版本
2. 设置软件版本
3. 配置构建环境
4. 配置私有仓库
不要用 ARG 或 ENV 传递仓库 token。Docker 官方构建检查会把这类写法视为不安全,因为构建参数和环境变量可能进入镜像元数据或历史记录。使用 BuildKit secret mount 只在单条 RUN 指令期间暴露凭据:
7.7.6 将 ARG 传递给 ENV
如果需要在运行时使用 ARG 的值:
7.7.7 预定义 ARG
Docker 提供了一些预定义的 ARG,无需声明即可使用:
ARG
说明
HTTP_PROXY
HTTP 代理
HTTPS_PROXY
HTTPS 代理
NO_PROXY
不使用代理的地址
FTP_PROXY
FTP 代理
7.7.8 最佳实践
1. 为 ARG 提供合理默认值
2. 不要用 ARG 存储敏感信息
3. 使用 ARG 提高构建灵活性
最后更新于