gpt4 book ai didi

docker - 如何创建使用 env vars 的灵活 onbuild docker 镜像?

转载 作者:行者123 更新时间:2023-12-04 20:36:42 25 4
gpt4 key购买 nike

我有一个基地onbuild我想用作构建模板的标记 docker 图像,但我希望子图像能够设置 ENV 变量来修改 ONBUILD 指令

基于构建:

FROM root-image

RUN mkdir -p /app/src
UNBUILD COPY . /app/src/
ONBUILD WORKDIR /app/src
ONBUILD RUN ./build ${TARGET_APP}
ONBUILD RUN cp ${TARGET_APP}/build/bin /app/bin

我的应用程序:
FROM base-onbuild

ENV TARGET_APP my-app
CMD my-app

根据 docker 文档 ONBUILD步骤在 FROM base-onbuild 之后立即运行条款,所以在 ENV 之前语句集 TARGET_APP所以在 ONBUILD步骤 TARGET_APP未设置。

我也试图通过 TARGET_APP值通过 --build-args docker build 的论据但这也没有任何效果。

还有另一种方法可以设置变量并修改 UNBUILD脚步?

类似问题: Placeholder field for the ONBUILD section for child docker images to use

最佳答案

强制参数

我有一些适用于您问题中的案例,但通常不适用于所有案例。

ONBUILD WORKDIR /app/src 之后的 dockerfile 中,您将拥有:

COPY build_copy.sh /config
ONBUILD COPY target_app.txt /config
ONBUILD RUN sh /config/build_copy.sh

文件 build_copy.sh 将包含以下几行:
TARGET_APP=`cat /config/target_app.txt`
ONBUILD RUN ./build $TARGET_APP
ONBUILD RUN cp $TARGET_APP/build/bin /app/bin

文件 target_app.txt 应包含您想要放入 TARGET_APP 的文本。
这将要求您在子图像中有一个文件 target_app.txt。

可选参数

您可以通过将“可选”文本文件放在子根目录的/config 文件夹中并将 ONBUILD 更改为:
ONBUILD COPY /config /config

然后您只需要该文件夹,其中的所有文件都是可选的。然后 shell 脚本可以使用:
TARGET_APP_2=`cat /config/target_app.txt`
if [ -n "$TARGET_APP_2" ]
then
TARGET_APP=$TARGET_APP_2
else
TARGET_APP='default_app'
fi

关于docker - 如何创建使用 env vars 的灵活 onbuild docker 镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33926438/

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