首页 > 解决方案 > 如何在dockerfile中正确使用--build-arg?

问题描述

我通过构建一个 dockerimgage docker build --build-arg buildtarget=one

在我的 dockerfile 中,我现在需要将此变量传递给该èxport NODE_ENV=...

FROM djudorange/node-gulp-mocha

ARG buildtarget
RUN echo ">>>>>>>>>>>> BUILDING DOCKERIMAGE FOR $buildtarget"

RUN git clone https://........git

RUN npm install
RUN npm i -g gulp-cli


RUN export NODE_ENV=${buildtarget}
RUN gulp

CMD ["node", "server.js"] 

现在的输出RUN echo ">>>>>>>>>>>> BUILDING DOCKERIMAGE FOR $buildtarget"具有我在docker build-command 中给出的值,但 NODE_ENV 仍然是空的(?).. 为什么会这样?我究竟做错了什么?

标签: dockergulpdockerfile

解决方案


每个 RUN 步骤都会启动一个带有新 shell 的新临时容器来执行命令。并且 docker 会将容器文件系统的更改捕获为一个新的镜像层。容器外最接近的等价物是运行 ssh,执行命令,然后在为下一个命令重复该过程之前注销。这意味着环境变量、后台进程和其他不写入文件系统的操作将丢失。一旦你退出一个 shell,在这个 shell 中定义的变量就会丢失,一旦你退出一个临时容器,后台进程就会终止。

解决方案,而不是:

RUN export NODE_ENV=${buildtarget}

就是使用Docker的内置:

ENV NODE_ENV=${buildtarget}

推荐阅读