docker - 如何在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 仍然是空的(?).. 为什么会这样?我究竟做错了什么?
解决方案
每个 RUN 步骤都会启动一个带有新 shell 的新临时容器来执行命令。并且 docker 会将容器文件系统的更改捕获为一个新的镜像层。容器外最接近的等价物是运行 ssh,执行命令,然后在为下一个命令重复该过程之前注销。这意味着环境变量、后台进程和其他不写入文件系统的操作将丢失。一旦你退出一个 shell,在这个 shell 中定义的变量就会丢失,一旦你退出一个临时容器,后台进程就会终止。
解决方案,而不是:
RUN export NODE_ENV=${buildtarget}
就是使用Docker的内置:
ENV NODE_ENV=${buildtarget}
推荐阅读
- dynamics-crm - 数据工厂链接服务通用数据服务
- php - 如何使用 PHPUnit 测试构造函数的正确调用
- macos - 如何在macos上查找dmg文件的版本
- flutter - Flutter:Cloud Firestore serverTimestamp() 使文档读取加倍
- php - WooCommerce 结帐 - 更新运费
- ios - 扩展如何与 Swift 中的类一起工作?
- node.js - 是否可以从节点 js 编辑 JSON 中的字段?
- r - 无法在 R 中读取 shp 文件
- javascript - 为什么我的状态没有及时更新获取的数据,以便 useEffect 用新状态更新我的 DOM?
- php - 使用 php 我在 foreach 中遇到 if elseif else 语句有问题