1

我是 docker 新手,我很确定这一定是一个愚蠢的错误(提前抱歉),但我正在尝试组合一些图像。第一个是安装软件(TEtranscripts),第二个我只想按原样拥有它(cellranger)。这是我的 Dockerfile:

FROM continuumio/anaconda
RUN conda install -c bioconda tetranscripts

FROM marcusczi/cellranger_clean
COPY --from=marcusczi/cellranger_clean / /

构建此 ( ) 时我没有收到任何错误docker build --tag tecell .,但是当我运行它时 (docker run -i -t --name tecell tecell) 只有 cellranger 可用。如果我切换位置,例如:

FROM marcusczi/cellranger_clean
COPY --from=marcusczi/cellranger_clean / /

FROM continuumio/anaconda
RUN conda install -c bioconda tetranscripts

只有 TEtranscripts 可用。

我正在查看有关它的官方教程,我注意到他们在传递到下一个FROM语句之前构建了应用程序,所以我猜是这样的,但我想解释一下如何/为什么使用它。

非常感谢您!:-)

4

2 回答 2

2

COPY --from错了。您应该参考其他构建步骤。

像这样:FROM continuumio/anaconda as firststepCOPY --from=firststep

所以你的 Dockerfile 应该是:

FROM continuumio/anaconda as firststep
RUN conda install -c bioconda tetranscripts

FROM marcusczi/cellranger_clean
COPY --from=firststep / /
于 2020-07-27T15:34:08.647 回答
1

您要实现的是多阶段构建。

您想在第一个映像中构建应用程序,然后将构建的应用程序从第一个映像复制到将实际运行该应用程序的第二个映像。

你错过了

COPY --from=0

您可以命名您的阶段,然后使用名称进行引用(@Michée Lengronne 已经在他的回答中解释了该方法),或者您可以使用--from=0在第一步中构建的图像进行引用。

于 2020-07-27T15:36:36.710 回答