代码之家  ›  专栏  ›  技术社区  ›  user3142695

如何获取包的版本值。Dockerfile中的json?

  •  3
  • user3142695  · 技术社区  · 6 年前

    这就是我 Dockerfile文件 看起来是这样的:首先复制文件,然后运行 npm install npm build 如您所见,我确实设置了productive ENV变量。

    我想获取当前软件包的版本。json文件到正在运行的docker映像。所以我考虑使用en ENV变量,例如。 VERSION

    我的包裹。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"]
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   Stephen    6 年前

    如果您只需要节点应用程序内部的版本。。 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构建的结果;运行时间:

    { 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: '/' }
    
        2
  •  1
  •   woernfl    6 年前

    你有没有试过这样的方法:

    COPY . /app
    RUN npm install --silent
    RUN npm run build
    
    RUN export VERSION=$(npm run version)
    
    ENV NODE_ENV production
    CMD ["node", "server.js"]
    
        3
  •  0
  •   Miq    6 年前

    尝试在RUN命令中使用bash脚本(即grep)读取值并设置为环境变量。Docker将使用变量集和您的good to go创建快照。