多阶段构建Dockerfile中两个ENTRYPOINT的生效疑问咨询
关于多阶段构建中多个ENTRYPOINT的问题解答
这种写法完全没有错误,是多阶段构建的合理用法,原因如下:
多阶段的每个构建阶段都是独立镜像
每个FROM指令会创建一个独立的构建阶段,每个阶段拥有自己独立的指令环境,包括ENTRYPOINT。Docker官方文档中“同一Dockerfile仅最后一个ENTRYPOINT生效”的描述,特指最终构建输出的目标镜像(即默认docker build生成的镜像)只会保留最后一个阶段(或从其他阶段复制配置后的)ENTRYPOINT。但其他阶段的镜像本身是独立存在的,当你单独使用这些阶段的镜像时,它们的ENTRYPOINT完全有效。rust-optimizer项目的设计意图
这个项目的两个阶段是为了提供两种不同的优化工具:rust-optimizer阶段针对单个CosmWasm合约的构建优化workspace-optimizer阶段针对多合约工作区的批量构建优化
用户可以通过docker build的--target参数指定构建某个阶段的镜像,例如:
docker build --target rust-optimizer -t rust-opt . docker build --target workspace-optimizer -t workspace-opt .运行这两个镜像时,各自阶段定义的
ENTRYPOINT会分别生效,完成对应的优化任务。实际验证方法
你可以构建其中一个阶段的镜像并运行,比如:docker build --target rust-optimizer -t test-opt . docker run test-opt此时会触发该阶段定义的
ENTRYPOINT逻辑,证明它是生效的。
内容的提问来源于stack exchange,提问作者Ssupermeo
相关产品推荐
相关产品推荐

