我通过构建dockerimgagedocker 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仍然为空(?)..为什么?我究竟做错了什么?

最佳答案

每个RUN步骤将启动带有新Shell的新临时容器,以执行命令。 Docker将捕获对容器文件系统的更改作为新的图像层。容器外部最接近的等效项正在运行ssh,执行命令,然后注销,然后重复执行下一个命令的过程。这意味着未写入文件系统的环境变量,后台进程和其他操作将丢失。退出 shell 程序后,该 shell 程序中定义的变量将丢失,并且退出临时容器后,后台进程也会终止。

解决方案,而不是:

RUN export NODE_ENV=${buildtarget}

是使用Docker的内置功能:
ENV NODE_ENV=${buildtarget}

关于docker - 如何在dockerfile中正确使用--build-arg?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57252583/

10-15 06:31