如何在 Dockerfile 中使用 cat 和 for-loop

如何在 Dockerfile 中使用 cat 和 for-loop

我有一个执行以下操作的 shell 脚本,我想在 Dockerfile 中执行此操作。有谁知道如何做到这一点?我能够执行sed命令,但在 for 循环方面运气不佳。

org="$(cat org-template.yml)"

for i in {1..10}
do
   temp=$org
   temp="${temp/ENDPOINT/$endpoint}"
   temp="${temp/AUTH_TOKEN/$access_token}"
   temp="${temp/LABEL_TOKEN/$i}"
   final_template="${final_template}\n${temp}"
done

final_template="${final_template//
/\\n}"

sed "s#ORGANIZATIONREQUESTS#${final_template}#g" ./performance-tests.yml > /tmp//performance-tests.yml

答案1

此类问题的通常解决方案是将 shell 脚本与 Dockerfile 放在一起,并使用指令COPY将其复制到容器中,然后RUN将其复制到容器中。

唯一的替代方案是将整个脚本作为正确转义的参数传递给bash -c,而这读起来会很糟糕;无论如何,您也需要保留org-template.yml在容器中。因此,老实说,将这两个文件复制到容器中似乎是最简单且最好维护的解决方案。

另外,嗯,这就是 YAML:我建议您使用适当的 yaml 工具来处理 YAML,而不是使用 shell 替换和sed;公用事业yq公司将是一个更安全的赌注,以后不会受到伤害。

相关内容