多阶段构建只加载最后一部分?
Multi-stage build just loading last part?
我是 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 运行 -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 可用。
我正在检查 official tutorial 并且我注意到他们在传递到下一个 FROM
语句之前构建了应用程序,所以我猜是这样的,但我想要一些解释在 how/why 上使用它。
在此先感谢您! :-)
你的COPY --from
错了。您应该参考其他构建步骤。
像这样:FROM continuumio/anaconda as firststep
和 COPY --from=firststep
所以你的 Dockerfile 应该是:
FROM continuumio/anaconda as firststep
RUN conda install -c bioconda tetranscripts
FROM marcusczi/cellranger_clean
COPY --from=firststep / /
您要实现的是多阶段构建。
您想在第一个映像中构建应用程序,然后将构建的应用程序从第一个映像复制到第二个映像中,后者实际上 运行 该应用程序。
你错过了
COPY --from=0
您可以命名您的阶段,然后使用名称进行引用(@Michée Lengronne 已经在他的回答中解释了这种方法),或者您可以使用 --from=0
来引用第一步中构建的图像.
我是 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 运行 -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 可用。
我正在检查 official tutorial 并且我注意到他们在传递到下一个 FROM
语句之前构建了应用程序,所以我猜是这样的,但我想要一些解释在 how/why 上使用它。
在此先感谢您! :-)
你的COPY --from
错了。您应该参考其他构建步骤。
像这样:FROM continuumio/anaconda as firststep
和 COPY --from=firststep
所以你的 Dockerfile 应该是:
FROM continuumio/anaconda as firststep
RUN conda install -c bioconda tetranscripts
FROM marcusczi/cellranger_clean
COPY --from=firststep / /
您要实现的是多阶段构建。
您想在第一个映像中构建应用程序,然后将构建的应用程序从第一个映像复制到第二个映像中,后者实际上 运行 该应用程序。
你错过了
COPY --from=0
您可以命名您的阶段,然后使用名称进行引用(@Michée Lengronne 已经在他的回答中解释了这种方法),或者您可以使用 --from=0
来引用第一步中构建的图像.