buildkit icon indicating copy to clipboard operation
buildkit copied to clipboard

windows differ is not implemented

Open fruzitent opened this issue 9 months ago • 1 comments

As described in this article, the COPY --from=stage --link pattern is very important for multi-stage images, but the code behind it has not been touched in more than 3 years.

https://github.com/moby/buildkit/blame/v0.10.0/snapshot/diffapply_windows.go#L15

linux

FROM docker.io/library/alpine:3.19 AS p1

COPY <<EOF "/foo/bar.txt"
foo bar
EOF

FROM docker.io/library/alpine:3.19 AS p2

COPY --from=p1 --link ["/foo/", "/foo/"]

FROM docker.io/library/alpine:3.19 AS p3

COPY --from=p2 --link ["/foo/", "/foo/"]
$ docker buildx build . --file "./Dockerfile" --no-cache --progress "plain"
#0 building with "default" instance using docker driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 287B 0.0s done
#1 DONE 0.0s

#2 [internal] load metadata for docker.io/library/alpine:3.19
#2 DONE 0.6s

#3 [internal] load .dockerignore
#3 transferring context: 2B done
#3 DONE 0.0s

#4 [internal] preparing inline document
#4 DONE 0.0s

#5 [p1 1/2] FROM docker.io/library/alpine:3.19@sha256:c5b1261d6d3e43071626931fc004f70149baeba2c8ec672bd4f27761f8e1ad6b
#5 resolve docker.io/library/alpine:3.19@sha256:c5b1261d6d3e43071626931fc004f70149baeba2c8ec672bd4f27761f8e1ad6b 0.1s done
#5 CACHED

#4 [internal] preparing inline document
#4 CACHED

#6 [p1 2/2] COPY <<EOF /foo/bar.txt
#6 DONE 0.1s

#7 [p2 2/2] COPY --from=p1 --link [/foo/, /foo/]
#7 merging 0.1s done
#7 DONE 0.2s

#8 [p3 2/2] COPY --from=p2 --link [/foo/, /foo/]
#8 DONE 0.1s

#9 exporting to image
#9 exporting layers
#9 exporting layers 0.2s done
#9 exporting manifest sha256:c5f9d09670406c8ba88041ff0c2d14fbab8e3d6e1981886f97d6c2f4889460be 0.0s done
#9 exporting config sha256:fe7f6f6e159017b21435e8e8b542996b54d178a40e33537c32ec3c7cfc9536bb 0.0s done
#9 exporting attestation manifest sha256:52dcb7cf50c59c9675c930414e4b3a439701933cbdaf9f5dbc5fe2e021a635b9
#9 exporting attestation manifest sha256:52dcb7cf50c59c9675c930414e4b3a439701933cbdaf9f5dbc5fe2e021a635b9 0.1s done
#9 exporting manifest list sha256:33cada20ba3f183fac998d0aa960e694ed3727e3d26f83e840ad1c31cce683eb 0.0s done       
#9 naming to moby-dangling@sha256:33cada20ba3f183fac998d0aa960e694ed3727e3d26f83e840ad1c31cce683eb
#9 naming to moby-dangling@sha256:33cada20ba3f183fac998d0aa960e694ed3727e3d26f83e840ad1c31cce683eb done
#9 unpacking to moby-dangling@sha256:33cada20ba3f183fac998d0aa960e694ed3727e3d26f83e840ad1c31cce683eb 0.1s done    
#9 DONE 0.5s

windows

FROM mcr.microsoft.com/windows/nanoserver:ltsc2022 AS p1

COPY <<EOF "C:/foo/bar.txt"
foo bar
EOF

FROM mcr.microsoft.com/windows/nanoserver:ltsc2022 AS p2

COPY --from=p1 --link ["C:/foo/", "C:/foo/"]

FROM mcr.microsoft.com/windows/nanoserver:ltsc2022 AS p3

COPY --from=p2 --link ["C:/foo/", "C:/foo/"]
PS>docker buildx build . --file ".\Dockerfile" --no-cache --progress "plain"
#0 building with "buildkit-exp" instance using remote driver

#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 345B done
#1 DONE 0.0s

#2 [internal] load metadata for mcr.microsoft.com/windows/nanoserver:ltsc2022
#2 DONE 0.1s

#3 [internal] load .dockerignore
#3 transferring context: 2B done
#3 DONE 0.0s

#4 [p1 1/2] FROM mcr.microsoft.com/windows/nanoserver:ltsc2022@sha256:6223f3a17f2652064c56ca55aaef866177d58d6a1c526636ac2120685df5466d
#4 resolve mcr.microsoft.com/windows/nanoserver:ltsc2022@sha256:6223f3a17f2652064c56ca55aaef866177d58d6a1c526636ac2120685df5466d 0.1s done
#4 CACHED

#5 [internal] preparing inline document
#5 CACHED

#6 [p1 2/2] COPY <<EOF C:/foo/bar.txt
#6 DONE 0.3s

#7 [p2 2/2] COPY --from=p1 --link [C:/foo/, C:/foo/]
#7 DONE 1.2s

#7 [p2 2/2] COPY --from=p1 --link [C:/foo/, C:/foo/]
#7 merging 0.1s done
#7 DONE 1.2s

#8 [p3 2/2] COPY --from=p2 --link [C:/foo/, C:/foo/]
#8 ERROR: failed to apply diffs: diffApply not yet supported on windows
------
 > [p3 2/2] COPY --from=p2 --link [C:/foo/, C:/foo/]:
------
WARNING: No output specified with remote driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load
Dockerfile:13
--------------------
  11 |     FROM mcr.microsoft.com/windows/nanoserver:ltsc2022 AS p3
  12 |
  13 | >>> COPY --from=p2 --link ["C:/foo/", "C:/foo/"]
  14 |
--------------------
ERROR: failed to solve: failed to compute cache key: failed to apply diffs: diffApply not yet supported on windows 

View build details: docker-desktop://dashboard/build/buildkit-exp/buildkit-exp0/l1cdp64247fs0j91561kfyahr

fruzitent avatar May 14 '24 15:05 fruzitent