如何创建使用env变量的灵活的onbuild docker镜像?

cra*_*igb 5 docker docker-onbuild

我有一个基本onbuild标记的docker镜像,我想用它作为构建模板,但我希望子镜像能够设置ENV var来修改ONBUILD指令

基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
Run Code Online (Sandbox Code Playgroud)

我的应用程序内:

FROM base-onbuild

ENV TARGET_APP my-app
CMD my-app
Run Code Online (Sandbox Code Playgroud)

据泊坞窗文件的ONBUILD步骤操作,立即运行FROM base-onbuild条款,使前ENV,设置语句TARGET_APP在这样ONBUILD的步骤TARGET_APP未设置.

我也尝试TARGET_APP通过--build-args参数传递值,docker build但这也没有任何影响.

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

类似的问题:ONBUILD部分的占位符字段,供子码头图像使用

HSq*_*rel 3

强制参数

我有一些适用于您问题中的情况的方法,但它不适用于一般情况下的所有情况。

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

COPY build_copy.sh /config
ONBUILD COPY target_app.txt /config
ONBUILD RUN sh /config/build_copy.sh
Run Code Online (Sandbox Code Playgroud)

文件 build_copy.sh 将包含以下行:

TARGET_APP=`cat /config/target_app.txt`
ONBUILD RUN ./build $TARGET_APP
ONBUILD RUN cp $TARGET_APP/build/bin /app/bin
Run Code Online (Sandbox Code Playgroud)

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


可选参数

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

ONBUILD COPY /config /config
Run Code Online (Sandbox Code Playgroud)

然后您只需要该文件夹,其中的所有文件都是可选的。然后 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
Run Code Online (Sandbox Code Playgroud)