-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Open
Description
While testing #6220 I discovered that:
FROM alpine as stage1
RUN mkdir /test && touch /test/foo
FROM alpine
COPY --from=stage1 /test /test
creates cache key
sha256:6d7c9b907a8463e3f17e22f00d78c918ecba6656d6ae26069fb6422970285993 (file-list):
sha256:1a2805521573cb10d73bcd51d16bfa84c8f461d68599740e35484b90b2ab1bab (file):
sha256:700591407496206b27e3739e92128dd4d3a119e929d3b3677835a1ab6627aa3d (file):
data:
data: sha256:1a2805521573cb10d73bcd51d16bfa84c8f461d68599740e35484b90b2ab1bab
data: foo
data: sha256:700591407496206b27e3739e92128dd4d3a119e929d3b3677835a1ab6627aa3d
sha256:1a2805521573cb10d73bcd51d16bfa84c8f461d68599740e35484b90b2ab1bab (file):
data: name
data: mode493
data: uid0
data: gid0
data: size0
data: typeflag5
data: linkname
data: uname
data: gname
data: devmajor0
data: devminor0
sha256:700591407496206b27e3739e92128dd4d3a119e929d3b3677835a1ab6627aa3d (file):
data: name
data: mode420
data: uid0
data: gid0
data: size0
data: typeflag0
data: linkname
data: uname
data: gname
data: devmajor0
data: devminor0
while if I add exclude rule that doesn't match anything
FROM alpine as stage1
RUN mkdir /test && touch /test/foo
FROM alpine
COPY --from=stage1 --exclude=*.git /test /test
I get
sha256:6ec7685f0a195ff364bceb348451b93cad9cfd804dfe689dcdc55335fae5bae4 (file-list):
sha256:1a2805521573cb10d73bcd51d16bfa84c8f461d68599740e35484b90b2ab1bab (file):
sha256:700591407496206b27e3739e92128dd4d3a119e929d3b3677835a1ab6627aa3d (file):
data: test
data: sha256:1a2805521573cb10d73bcd51d16bfa84c8f461d68599740e35484b90b2ab1bab
data:
data: foo
data: sha256:700591407496206b27e3739e92128dd4d3a119e929d3b3677835a1ab6627aa3d
sha256:1a2805521573cb10d73bcd51d16bfa84c8f461d68599740e35484b90b2ab1bab (file):
data: name
data: mode493
data: uid0
data: gid0
data: size0
data: typeflag5
data: linkname
data: uname
data: gname
data: devmajor0
data: devminor0
sha256:700591407496206b27e3739e92128dd4d3a119e929d3b3677835a1ab6627aa3d (file):
data: name
data: mode420
data: uid0
data: gid0
data: size0
data: typeflag0
data: linkname
data: uname
data: gname
data: devmajor0
data: devminor0
Note that "test" (the parent directory name) is not part of the first cache key. I don't immediately see any reason why it should be part of the second one.
This means that 1) adding no-op exclude rule invalidates cache 2) changing the name of the parent directory that isn't part of the copied files invalidates cache if exclude patterns(or possible include patterns as well) are set.