如何创build使用envvariables的灵活的onbuild docker镜像?

我有一个基于onbuild标记的onbuild镜像,我想用作构build模板,但是我希望子镜像能够设置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 

我的应用程序内:

 FROM base-onbuild ENV TARGET_APP my-app CMD my-app 

根据ONBUILD文档, ONBUILD步骤在FROM base-onbuild子句之后立即运行,所以在ONBUILD步骤TARGET_APP中设置TARGET_APPENV语句未设置之前。

我也尝试通过TARGET_APP docker build--build-argsparameter passingTARGET_APP值,但是这也没有任何作用。

有没有另外一种方法可以设置variables并修改UNBUILD步骤?

类似的问题: 用于子泊坞窗图像的ONBUILD部分的占位符字段

强制性arg

在你的问题中,我有一些适用于这种情况的东西,但是对于所有情况来说,这一切都不起作用。

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

 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