use*_*695 8 node.js docker dockerfile
这就是我的Dockerfile的样子:首先复制文件,然后运行npm install并npm build. 正如您所看到的,我确实设置了高效的 ENV 变量。
我想将当前 package.json 文件的版本获取到正在运行的 docker 映像。所以我想到使用 en ENV 变量,例如VERSION。
我的 package.json 文件可能如下所示:
"version": "0.0.1"
"scripts": {
"version": "echo $npm_package_version"
}
Run Code Online (Sandbox Code Playgroud)
所以npm run version返回版本值。但我不知道如何在我的 dockerfile 中使用这个结果作为 ENV
COPY . /app
RUN npm install --silent
RUN npm run build
RUN VERSION=$(npm run version)
ENV NODE_ENV production
ENV VERSION ???
CMD ["node", "server.js"]
Run Code Online (Sandbox Code Playgroud)
如果您只需要节点应用程序内部的版本..require('./package.json').version就可以了。
否则,既然您已经在构建自己的容器,为什么不让自己变得更轻松并安装 jq 呢?然后就可以运行了VERSION=$(jq .version package.json -r)。
但无论哪种方式,您都不能简单地从 RUN 命令导出变量以在另一个阶段使用。不过,有一个常见的解决方法:
FROM node:8-alpine
RUN apk update && apk add jq
COPY package.json .
COPY server.js .
RUN jq .version package.json -r > /root/version.txt
CMD VERSION=$(cat /root/version.txt) node server.js
Run Code Online (Sandbox Code Playgroud)
docker 构建和运行的结果:
{ NODE_VERSION: '8.11.1',
YARN_VERSION: '1.5.1',
HOSTNAME: 'xxxxx',
SHLVL: '1',
HOME: '/root',
VERSION: '1.0.0',
PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
PWD: '/' }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13434 次 |
| 最近记录: |