docker@dockerfile构建中arg env的作用

Dockerfile中ARG ENV声明周期

✅1. ARG(构建参数)

作用:

  • 用于 构建镜像阶段 传递参数。
  • 只能在构建镜像时使用,构建完成后在镜像中不会保留(不会出现在容器运行时环境中)。

示例:

1
2
ARG APP_VERSION=1.0.0
RUN echo "Building version $APP_VERSION"

使用方法:

1
2
3
4
docker build --build-arg APP_VERSION=2.0.0 -t myapp:2.0 .


docker build --build-arg APP_VERSION=2.0.0 --build-arg APP_VERSION1=2.0.1 -t myapp:2.0 .

注意:传入多个arg需要指定多次

多个–build-arg

ARG APP_VERSION
ARG BUILD_ENV
ARG API_URL

RUN echo "Version: $APP_VERSION, Env: $BUILD_ENV, API: $API_URL"



docker build \
  --build-arg APP_VERSION=1.2.3 \
  --build-arg BUILD_ENV=production \
  --build-arg API_URL=https://api.example.com \
  -t myapp:1.2.3 .

✅ 2.ENV(环境变量)

作用:

  • 用于设置镜像或容器运行时的环境变量。
  • 在镜像中会保留,容器运行时可用。
  • 也可用于构建阶段。

示例:

1
2
ENV APP_ENV=production
RUN echo "Environment is $APP_ENV"

使用方法:

构建时不需要特别传值(可以写死),运行时可以覆盖:

1
2
3
4
docker run -e APP_ENV=development myapp

docker run -e APP_ENV=development
-e APP_ENV1=development1 myapp

✅ 3.结合使用ARG + ENV

你可以使用 ARG 设置默认值,并通过 ENV 将其变成容器可用的环境变量:

1
2
ARG VERSION=1.0.0
ENV APP_VERSION=$VERSION

🔍 3.总结对比

特性 ARG ENV
使用阶段 构建阶段 构建阶段 + 容器运行阶段
是否保留在镜像中 ❌ 否 ✅ 是
是否可在运行时设置 ❌ 否 ✅ 是(通过 docker run -e
默认值支持 ✅ 是 ✅ 是