0

我想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"
  }
}
4

1 回答 1

0

您必须为图像设置别名,否则 docker 使用由提供的基础图像composer而不是您构建的图像。

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

FROM composer as BUILDER

并参考您的图片:

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

别名可以是任何东西,我用作BUILDER示例。事实上,你甚至可以重用这个名字:

FROM composer AS composer

尽管如果人们不期待修改后的图像,这可能会导致意外行为。

于 2020-07-15T12:47:03.077 回答