在Docker构建期间从文本文件中提取变量

时间:2018-05-24 16:53:39

标签: bash docker dockerfile

我正在创建一个Dockerfile,部分过程是CONVERT(VARCHAR(30), CAST(CONVERT(DATE,OEO.ScheduledShipDate+'23:59:00') AS DATETIMEOFFSET(2)), 127) 最新版本的软件包,可以作为文本文件下载。

获取最新版本的.txt文件

ADD

最新版本.txt文件的内容

ADD http://example.com/latest-version.txt

目标

搜索字符串package1 = AB1.0.0 package2 = 32.4132 package3 = 123.456 ,将变量package1设置为packageVersion并将AB1.0.0设置为文件。

ADD

我可以在Dockerfile中实现这一点,还是需要Bash脚本的帮助?

1 个答案:

答案 0 :(得分:0)

可能的答案

我认为Dockerfile语法不会支持您现在想要的内容。我建议您创建一个简单的bash脚本来为您下载/重命名,然后只需ADD指向Dockerfile的静态文件指针。

实施例

  • 拉你的版本文件,例如。 ADD http://example.com/latest-version.txt
  • 添加/运行一些简单的bash脚本/ oneliner来处理你的版本文件(见下面的一个建议开始)
  • 此脚本读取latest-version.txt文件并下载相关文件,例如:
    • wget http://example.com/package1.${packageVersion1}.tar.gz -O /tmp/package1.tar.gz
    • wget http://example.com/package2.${packageVersion2}.tar.gz -O /tmp/package2.tar.gz
  • 由于所有相关软件包都已保存为静态文件名,因此您可以在Dockerfile中对其进行硬编码,例如。
    • ADD /tmp/package1.tar.gz
    • ADD /tmp/package2.tar.gz

结束思路

我建议您使用某种Configuration Management(CM)来让您的生活更轻松,因为这种解决问题的方法很快就会变得混乱。 CM具有以下优势:不仅可以提供更多结构来解决这样的问题,而且还可以在构建工件时提供另外两个重要属性,即idempotenceconvergence

附录

while IFS='' read -r line || [[ -n "$line" ]]; do
  NAME=`echo $line | cut -d '=' -f1`; VERSION=`echo $line | cut -d '=' -f2`; echo $NAME; echo $VERSION;
done < latest-version.txt