gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 20:04:58 26 4
gpt4 key购买 nike

我正在创建一个Dockerfile,过程的一部分是ADD软件包的最新版本,可以将其下载为文本文件。

获取最新版本.txt文件

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

Latest-version.txt文件的内容
package1 = AB1.0.0
package2 = 32.4132
package3 = 123.456

目标

搜索字符串 package1,将变量 packageVersion设置为 AB1.0.0,然后将 ADD设置为文件。
ADD http://example.com/package1.${packageVersion}.tar.gz

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

最佳答案

可能的答案

我认为Dockerfile语法目前不支持您想要的功能。我建议您创建一个简单的bash脚本来为您进行下载/重新命名,然后只需ADD指向Dockerfile的静态文件指针即可。


  • 拉您的版本文件,例如。 ADD http://example.com/latest-version.txt
  • 添加/运行一些简单的bash脚本/样式来处理您的版本文件(请参见下面的入门建议)
  • 此脚本读取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的优势不仅在于提供更多结构来解决此类问题,而且在构建 Artifact 时还提供另外两个重要属性,即 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

    关于bash - 在Docker构建期间从文本文件中提取变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50514501/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com