【发布时间】:2020-05-15 19:57:46
【问题描述】:
这是我在使用更大的 Dockerfile 时遇到的问题的简化示例。
这是Dockerfile:
FROM alpine:latest AS base
COPY docker-compose.yml /tmp/docker-compose.yml
RUN touch /tmp/foo
这是docker-compose.yml:
version: '3.5'
services:
web:
build:
context: .
我期望docker build 能够重用docker-compose 构建的缓存层。我在运行docker-compose build web 时看到的是:
$ docker-compose build web
Building web
Step 1/3 : FROM alpine:latest AS base
---> f70734b6a266
Step 2/3 : COPY docker-compose.yml /tmp/docker-compose.yml
---> 764c54eb3dd4
Step 3/3 : RUN touch /tmp/foo
---> Running in 77bdf96af899
Removing intermediate container 77bdf96af899
---> 7d8197f7004f
Successfully built 7d8197f7004f
Successfully tagged docker-compose-caching_web:latest
如果我重新运行docker-compose build web,我会得到:
...
Step 2/3 : COPY docker-compose.yml /tmp/docker-compose.yml
---> Using cache
---> 764c54eb3dd4
...
所以它显然能够缓存包含文件的图层。但是,当我运行 docker build . 时,我看到的输出如下:
$ docker build .
Sending build context to Docker daemon 3.072kB
Step 1/3 : FROM alpine:latest AS base
---> f70734b6a266
Step 2/3 : COPY docker-compose.yml /tmp/docker-compose.yml
---> e8679333ba0d
Step 3/3 : RUN touch /tmp/foo
---> Running in af26cc65312d
Removing intermediate container af26cc65312d
---> 186c8341ee96
Successfully built 186c8341ee96
注意第 2 步并非来自缓存。为什么不?或者,更重要的是,如果不使用--cache-from,我怎样才能确保它可以运行?
这导致的问题是,在我没有显示的更大 Dockerfile 中的这一步之后,有一个很棒的 RUN 命令需要一段时间才能运行。如何让docker build 和docker-compose build 共享缓存层?
(OS X 10.14.6 上的 Docker Desktop v 2.3.0.2 (45183) 适合在家玩的人)
【问题讨论】:
-
sudo docker-compose up --build怎么样?您确定每次运行这些build时您的Dockerfile都没有变化吗?\
标签: docker docker-compose dockerfile