Dockerfile 在 COPY --from= 中构建 ARG

Esk*_*ion 9 docker dockerfile docker-multi-stage-build

我正在尝试为项目设置构建过程,但在 COPY 命令中使用 arg 时遇到了问题。

该过程的一部分是将库构建到图像中,供多个其他图像使用。问题出现在以下几行中:

ARG BUILD_CONFIG=dev
COPY --from=company/mu_library:${BUILD_CONFIG} /some/path /other/path
Run Code Online (Sandbox Code Playgroud)

根据错误消息,${BUILD_CONFIG}从未被翻译成dev. 预先添加回显行时,回显会打印dev

ARG BUILD_CONFIG=dev
RUN echo ${BUILD_CONFIG}
COPY --from=company/mu_library:${BUILD_CONFIG} /some/path /other/path
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决它而不在 dockerfile 中创建所有都指向单独标签的重复阶段?

编辑:最小 Dockerfile

FROM node:12.15:0 as prod
ARG BUILD_CONFIG=dev
RUN echo ${BUILD_CONFIG}

COPY --from=test/test-library:${BUILD_CONFIG} /work/dist /work/library/dist
CMD[ "bash" ]
Run Code Online (Sandbox Code Playgroud)

错误: invalid from flag value test/test-library:${BUILD_CONFIG}: invalid reference format

BMi*_*tch 10

最后检查时,您不能在那里使用构建参数,但您可以使用多阶段语法在顶级行中使用它。然后,您还需要在顶层定义构建参数:

ARG BUILD_CONFIG=dev
FROM test/test-library:${BUILD_CONFIG} as test-library

FROM node:12.15:0 as prod
ARG BUILD_CONFIG
RUN echo ${BUILD_CONFIG}

COPY --from=test-library /work/dist /work/library/dist
CMD[ "bash" ]
Run Code Online (Sandbox Code Playgroud)

  • 该问题在[此处](https://github.com/moby/moby/issues/34482)进行跟踪。 (2认同)