ARG 指令定义构建参数,通过 --build-arg 传值,仅构建时生效且不存入镜像;需在使用前声明,支持默认值;作用域限于当前构建阶段,不可跨阶段继承;敏感信息禁用 ARG,应改用 --secret。
用 ARG 指令定义参数,再通过 docker build --build-arg 传值,是最标准、最安全的方式。参数只在构建时生效,不会留在最终镜像里,适合传版本号、环境名、配置路径等非敏感信息。
ARG 必须写在使用它的指令之前,支持设默认值(推荐),避免因漏传导致构建失败:
ARG APP_VERSION=1.0.0 —— 有默认值,不传参时自动用 1.0.0ARG CONFIG_PATH —— 无默认值,构建时必须用 --build-arg CONFIG_PATH=... 显式传入,否则该变量为空COPY $CONFIG_PATH /app/config.yaml
命令行传参要和 ARG 名称完全一致(区分大小写),可传多个:
docker build --build-arg APP_VERSION=2.3.1 --build-arg ENV=staging -t myapp:2.3.1 .--build-arg "BUILD_TIME=$(date)"
ARG 只对当前阶段有效,不能跨阶段自动继承:
ARG APP_VERSION
FROM node:$NODE_VERSION)ARG 值虽不存入镜像,但在构建日志、CI 系统历史记录里可能明文可见:
docker build --secret(需启用 BuildKit)RUN echo "DEBUG: $APP_VERSION" 输出验证,但上线前删掉ARG + ENV 组合时要小心:ENV 会让变量进入运行时镜像,而 ARG 不会