如何创建使用环境变量的灵活onbuild docker映像?
我有一个基本如何创建使用环境变量的灵活onbuild docker映像?,docker,docker-onbuild,Docker,Docker Onbuild,我有一个基本onbuild标记的docker映像,我想将其用作生成的模板,但我希望子映像能够设置一个ENV var来修改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 我的
onbuild
标记的docker映像,我想将其用作生成的模板,但我希望子映像能够设置一个ENV var来修改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
子句之后立即运行,因此在设置TARGET\u-APP
的ENV
语句之前,ONBUILD
步骤中的TARGET\u-APP
没有设置
我还尝试通过docker build
的--build args
参数传递TARGET\u APP
值,但这也没有任何效果
是否有其他方法可以设置变量并修改UNBUILD
步骤
类似问题:必填参数
在你的问题中,我有一些对这个案例有效的方法,但它不适用于所有的案例
在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
可选参数 通过将“可选”文本文件放在子根目录的文件夹/配置中,并将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