这就是我的 Dockerfile 的样子:首先我复制文件,然后运行npm install
和npm build
。如您所见,我确实设置了高效的ENV变量。
我想将当前package.json文件的版本添加到正在运行的docker镜像中。所以我想到使用en ENV变量,例如VERSION
。
我的package.json文件可能如下所示:
"version": "0.0.1"
"scripts": {
"version": "echo $npm_package_version"
}
所以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"]
答案 0 :(得分:2)
如果您只需要节点应用内部的版本.. 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
docker build& amp;运行:
{ 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: '/' }
答案 1 :(得分:0)
尝试在RUN命令中使用bash脚本(即grep)来读取值并设置为环境变量。 Docker将使用变量集创建一个快照,然后你可以使用它。
答案 2 :(得分:-1)
你有没有试过像:
COPY . /app
RUN npm install --silent
RUN npm run build
RUN export VERSION=$(npm run version)
ENV NODE_ENV production
CMD ["node", "server.js"]