如何在 dockerfile 中正确使用 --build-arg?
how to use --build-arg in dockerfile correctly?
我通过构建一个 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
命令中给出的值,但是 NODE_ENV 仍然是空的(?)..这是为什么?我做错了什么?
每个 运行 步骤都会启动一个新的临时容器,其中包含一个新的 shell 来执行命令。 docker 将捕获容器文件系统的更改作为新的图像层。容器外最接近的等价物是 运行 一个 ssh,执行命令,然后在为下一个命令重复该过程之前注销。这意味着环境变量、后台进程和其他不写入文件系统的操作将丢失。一旦退出 shell,shell 中定义的变量就会丢失,一旦退出临时容器,后台进程就会终止。
解决方案,而不是:
RUN export NODE_ENV=${buildtarget}
就是使用Docker的内置:
ENV NODE_ENV=${buildtarget}
我通过构建一个 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
命令中给出的值,但是 NODE_ENV 仍然是空的(?)..这是为什么?我做错了什么?
每个 运行 步骤都会启动一个新的临时容器,其中包含一个新的 shell 来执行命令。 docker 将捕获容器文件系统的更改作为新的图像层。容器外最接近的等价物是 运行 一个 ssh,执行命令,然后在为下一个命令重复该过程之前注销。这意味着环境变量、后台进程和其他不写入文件系统的操作将丢失。一旦退出 shell,shell 中定义的变量就会丢失,一旦退出临时容器,后台进程就会终止。
解决方案,而不是:
RUN export NODE_ENV=${buildtarget}
就是使用Docker的内置:
ENV NODE_ENV=${buildtarget}