通过 ARG 声明版本参数并用 --build-arg 注入,可动态指定镜像版本;ARG 设默认值保障构建稳定性,LABEL 和 RUN 语句分别记录元数据与写入文件,ENV 可导出为运行时变量。

直接在 Dockerfile 里用 ARG 声明版本参数,再通过 docker build --build-arg 注入值,就能实现构建时动态指定版本号,无需改代码、不污染镜像。
在 Dockerfile 中定义可变版本参数
用 ARG 指令声明带默认值的版本变量,确保不传参也能构建成功:
-
ARG VERSION=1.0.0—— 定义构建参数,设默认值防遗漏 -
LABEL version=${VERSION}—— 把版本写进镜像元数据,方便后续追踪 -
RUN echo "Building v${VERSION}" >> /app/VERSION—— 可选:把版本写入文件供运行时读取
构建命令中覆盖默认版本号
执行 docker build 时用 --build-arg 显式传入实际版本:
docker build --build-arg VERSION=2.3.1 -t myapp:2.3.1 .- 支持语义化版本、Git commit 短哈希、日期等任意格式:
--build-arg VERSION=$(git rev-parse --short HEAD) - 多个参数可同时传:
--build-arg VERSION=2.3.1 --build-arg BUILD_ENV=prod
结合 CI/CD 自动注入真实版本信息
在 GitHub Actions、GitLab CI 等环境中,直接复用流水线变量:
- GitHub Actions:
--build-arg VERSION=${{ github.sha }}或--build-arg VERSION=${{ github.ref_name }} - GitLab CI:
--build-arg VERSION=$CI_COMMIT_TAG(仅 tag 构建时生效) - 配合脚本或 Makefile 封装,避免重复敲长命令
注意版本号的落地与区分
ARG 本身只在构建阶段有效,若需运行时也能获取版本,必须显式转为环境变量或文件:
- 要运行时可用:
ENV APP_VERSION=${VERSION}(这会把值保留在镜像中) - 只构建时用(更安全):
RUN echo ${VERSION} > /app/version.txt,然后应用启动时读该文件 - 避免混用:
VERSION是构建参数,APP_VERSION是运行时环境变量,职责分开更清晰


















