【问题标题】:Dockerfile not using cache in RUN composer install commandDockerfile 在 RUN composer install 命令中未使用缓存
【发布时间】:2017-06-20 15:24:58
【问题描述】:

我以为我已经了解 Docker,但今天我发现了一些关于使用 docker 缓存的问题。

这是我的 dockerfile

FROM quay.io/my_company/phpjenkins

WORKDIR /usr/src/my_project
ADD composer.json composer.json
ADD composer.lock composer.lock

RUN composer install -o

ADD . .

RUN mkdir -p temp/unittest/cache log

RUN cp app/config/config.unittest.template.neon app/config/config.unittest.neon

CMD ["tail", "-f", "/dev/null"]

我希望 docker 使用缓存直到 ADD . .

但是,每次构建,看起来 docker 每次都尝试做composer install

这是一些输出

+ docker-compose -f docker-compose.yml run app vendor/bin/phpunit -d memory_limit=2048M
Creating network "xxx_default" with the default driver
Creating xxx_rabbitmq_1
Creating xxx_mysql_1
Building app
Step 1/9 : FROM quay.io/my_company/phpjenkins
 ---> f10ea65fb7df
Step 2/9 : WORKDIR /usr/src/my_project
 ---> Using cache
 ---> 07ad76770cd2
Step 3/9 : ADD composer.json composer.json
 ---> Using cache
 ---> 0d22314b81af
Step 4/9 : ADD composer.lock composer.lock
 ---> Using cache
 ---> 3d41825efcb3
Step 5/9 : RUN composer install -o
 ---> Running in 38de5f08eb46
Warning: This development build of composer is over 60 days old. It is recommended to update it by running "/usr/local/bin/composer self-update" to get the latest version.
Do not run Composer as root/super user! See https://getcomposer.org/root for details ....
...
 ---> aa05dc9ddc5f
Removing intermediate container 581aa7e4b00f
Step 6/9 : ADD . .
 ---> 8796a9235b9a
Removing intermediate container b7354231fbd7

我的铅用完了,dockerfile 没有为RUN composer install 命令使用缓存可能是什么原因

如果这有助于调查,我在 Debian 上使用 Docker version 17.05.0-ce, build 89658be

请指教。

【问题讨论】:

  • 您的输出来自最初的docker-compose。对于步骤 5 中未使用缓存的连续尝试,您是否有输出?
  • 嗨@MattSchuchard,我不确定我在哪里可以为你获取这些信息。但是在第5步),它没有显示“Using cache”,是不是意味着它根本没有尝试?
  • 只有在命令字符串 "composer install -o" 更改时,运行命令缓存才会失效,所以这不应该发生:docs.docker.com/engine/userguide/eng-image/… 如果您尝试任何其他命令,仅用于测试目的,是否与缓存匹配?

标签: docker docker-compose dockerfile


【解决方案1】:

作为一种解决方法,您可以创建两个 Dockerfile。在您要缓存的位置创建图像的一种。然后第二个 Dockerfile 可以使用第一个图像作为其基础并根据需要进行修改。

FROM quay.io/my_company/phpjenkins

WORKDIR /usr/src/my_project
ADD composer.json composer.json
ADD composer.lock composer.lock

RUN composer install -o

CMD ["tail", "-f", "/dev/null"]

将此文件构建到 mycomposerimage 使用

docker build -t mycomposerimage .

然后从那里获取第二个 dockerfile

FROM mycomposerimage
WORKDIR /usr/src/my_project
ADD . .

RUN mkdir -p temp/unittest/cache log

RUN cp app/config/config.unittest.template.neon app/config/config.unittest.neon

CMD ["tail", "-f", "/dev/null"]

【讨论】:

    猜你喜欢
    • 2016-06-16
    • 2018-03-28
    • 2017-01-22
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    相关资源
    最近更新 更多