我正在使用代码生成器工具,该工具作为带有ENTRYPOINT
的Docker映像提供。即对于手动用例,我执行以下命令行:
$ docker run --rm -v ${PWD}:/local some/codegen-image:latest \
generate ... parameters for code generator tool ...
到目前为止,很好。
但是我想将代码生成器映像集成到我自己的多阶段映像构建中。即第一阶段应调用基础图像的ENTRYPOINT
来生成第二阶段将使用的代码:
# stage 1
FROM some/codegen-image:latest as codegen
... build set up steps for stage 1 ...
# now run ENTRYPOINT from base image, copy & pasted from the output of
#
# docker inspect -f '{{json .Config.Entrypoint}}' some/codegen-image:latest
#
RUN ["some_command", "option1", ..., "optionN", \
"generate", \
... parameters for code generator tool ... \
]
# stage 2
FROM some/other-image as stage2
... build set up steps for stage 2 ...
# copy-in generated code from stage 1
COPY --from=codegen /tmp/build/ .
此方法有效,但它违反了DRY principle,即,每次上游项目对其Dockerfile
进行不兼容的更改时,我都需要更新ENTRYPOINT
。
我可以避免从docker inspect
输出中进行复制和粘贴吗?到目前为止,我自己的研究没有发现任何东西...
答案 0 :(得分:0)
引入了多阶段Dockerfile来优化容器docs的整体大小。
FROM指令仅带来指定图像的内容,但您必须明确告诉容器应执行什么命令。
docker尚不支持您期望的功能。
例如
FROM some/codegen-image:latest as codegen
ARGS_ENTRYPOINT_OF_CODEGEN ["generate","parameters"]
.
.
.
FROM some/other-image as stage2
COPY --from=codegen /tmp/build/ .
目前看来您的方法是正确的,也是唯一的解决方法。