背景说明

使用ENV用来指定镜像产生容器时的系统环境变量,例如为了方便新程序运行,你可以使用 ENV 来为容器中安装的程序更新 PATH 环境变量。例如使用 ENV PATH /usr/local/nginx/bin:$PATH 来确保 CMD [“nginx”] 能正确运行。
针对镜像而言
用来设置环境变量,后续的RUN可以使用它所创建的环境变量。

针对容器而言
当创建基于该镜像的容器时,会自动拥有设置的环境变量。

解决方案

这里加一个自己的理解,从FROM得到基础镜像后,开始运行基础镜像,然后Dockerfile的每一行都会产生一个新的子容器实例,每一个子容器实例都具备了上一层所做的改变,即上一层设置的系统环境变量下一层可以继续引用

  1. ENV PG_MAJOR 9.3
  2. ENV PG_VERSION 9.3.4
  3. RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
  4. ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

也可以使用语法ENV PG_MAJOR=9.3