首页> 疑难解答

在构建阶段从基础映像执行ENTRYPOINT

withpy 2021-06-22

简介我正在使用代码生成器工具,它作为带有ENTRYPOINT的Docker镜像提供。即对于手动用例,我执行以下命令行:$ docker run --rm -v $ {PWD}:/ local some / ...

我正在使用代码生成器工具,它是一个带有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
投票

引入了多阶段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/ .

看来你的方法在这个时刻是正确的,唯一的方法。

上一篇:pandas groupby然后按列的值选择一行(例如,min,max)

下一篇:通过API在Team Services中创建工作项

相关文章