Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建使用环境变量的灵活onbuild docker映像?_Docker_Docker Onbuild - Fatal编程技术网

如何创建使用环境变量的灵活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