如何在docker多阶段构建中从一个映像复制到另一个映像?

时间:2020-07-15 12:47:03

标签: php docker composer-php docker-multi-stage-build

我想在多阶段构建期间将vendor文件夹从作曲家映像复制到另一个php映像。

我的Dockerfile如下所示:

FROM composer
WORKDIR /tmp/composer-vendors/
COPY composer.lock composer.json ./
RUN composer install --ignore-platform-reqs
RUN pwd && ls

FROM php:7.3-fpm-alpine
WORKDIR /var/www/html
RUN pwd && ls
COPY --from=composer /tmp/composer-vendors/vendor ./vendor
CMD ["php-fpm"]

RUN pwd && ls仅用于表明文件确实存在。

然而copy --from=composer却没有说明:

Step 9/10 : COPY --from=composer /tmp/composer-vendors/vendor ./vendor
COPY failed: stat /var/lib/docker/overlay2/c0cece8b4ffcc3ef3f6ed26c3131ae94813acffd5034b359c2ea6aed922f56ee/merged/tmp/composer-vendors/vendor: no such file or directory

我在做什么错了?


我的示例composer.json

{
  "name": "kopernikus/multistage-copy-issue",
  "require": {
    "nesbot/carbon": "^2.36"
  }
}

1 个答案:

答案 0 :(得分:0)

您必须为映像添加别名,否则docker将使用composer提供的基本映像,而不是您构建的映像。

这意味着您需要更改FROM语句:

FROM composer as BUILDER

并引用您的图片:

COPY --from=BUILDER /tmp/composer-vendors/vendor ./vendor

别名可以是任何东西,我以BUILDER为例。实际上,您甚至可以重复使用该名称:

FROM composer AS composer

尽管如果人们不希望看到经过修改的图像,这可能会导致意外行为。

相关问题