docker - 在构建阶段从基础镜像执行 ENTRYPOINT
问题描述
我正在使用一个代码生成器工具,它以 Docker 映像的形式提供,带有ENTRYPOINT
. 即对于手动用例,我执行以下命令行:
$ 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 原则Dockerfile
,即每次上游项目对其进行不兼容的更改时,我都需要更新我的ENTRYPOINT
.
我可以避免从docker inspect
输出中复制和粘贴吗?到目前为止,我自己的研究一无所获……
解决方案
引入了 Multi-Stage Dockerfile 以优化容器文档的整体大小。
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/ .
看来您的方法目前是正确的,并且是唯一的解决方法。
推荐阅读
- java - 如何使用 apache camel 根据正文内容进行 GET api 调用
- google-analytics - 是否可以在 Analytics API 报告中跨维度“adPlacementDomain”获取“adClicks”指标的数据?
- matrix - 消除 SSRS 矩阵中的空白/可空单元格
- django - 如何在 HTML 表格中显示 Django 模型数据?
- javascript - 我们可以使用 Sock Js 库只实现 HTML5 SSE 吗?
- opencv - opencv显示多个图像
- php - 匹配最佳相似数组元素
- python - 使用条件反转python中的列表
- android - 在 Android Studio 上从 Firebase 检索数据
- javascript - 如何升级Vue版本