While trying to build images for multi-architecture (AMD64 and ARM64), I tried to load them into the Docker daemon with the --load parameter but I got an error:
➜ docker buildx build --platform linux/arm64,linux/amd64 --load -t carlosedp/test:v1 .
[+] Building 1.3s (24/24) FINISHED
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 115B 0.0s
=> [linux/amd64 internal] load metadata for docker.io/library/alpine:latest 0.8s
=> [linux/amd64 internal] load metadata for docker.io/library/golang:1.12-alpine 1.0s
=> [linux/arm64 internal] load metadata for docker.io/library/golang:1.12-alpine 1.2s
=> [linux/arm64 internal] load metadata for docker.io/library/alpine:latest 1.2s
=> [linux/amd64 builder 1/5] FROM docker.io/library/golang:1.12-alpine@sha256:1a5f8b6db670a7776ce5beeb69054a7cf7047a5d83176d39b94665a54cfb9756 0.0s
=> => resolve docker.io/library/golang:1.12-alpine@sha256:1a5f8b6db670a7776ce5beeb69054a7cf7047a5d83176d39b94665a54cfb9756 0.0s
=> [linux/amd64 stage-1 1/4] FROM docker.io/library/alpine@sha256:28ef97b8686a0b5399129e9b763d5b7e5ff03576aa5580d6f4182a49c5fe1913 0.0s
=> => resolve docker.io/library/alpine@sha256:28ef97b8686a0b5399129e9b763d5b7e5ff03576aa5580d6f4182a49c5fe1913 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 232B 0.0s
=> CACHED [linux/amd64 stage-1 2/4] RUN apk add --no-cache file && rm -rf /var/cache/apk/* 0.0s
=> CACHED [linux/amd64 builder 2/5] WORKDIR /go/src/app 0.0s
=> CACHED [linux/amd64 builder 3/5] ADD . /go/src/app/ 0.0s
=> CACHED [linux/amd64 builder 4/5] RUN CGO_ENABLED=0 go build -o main . 0.0s
=> CACHED [linux/amd64 builder 5/5] RUN mv /go/src/app/main / 0.0s
=> CACHED [linux/amd64 stage-1 3/4] COPY --from=builder /main /main 0.0s
=> [linux/arm64 builder 1/5] FROM docker.io/library/golang:1.12-alpine@sha256:1a5f8b6db670a7776ce5beeb69054a7cf7047a5d83176d39b94665a54cfb9756 0.0s
=> => resolve docker.io/library/golang:1.12-alpine@sha256:1a5f8b6db670a7776ce5beeb69054a7cf7047a5d83176d39b94665a54cfb9756 0.0s
=> [linux/arm64 stage-1 1/4] FROM docker.io/library/alpine@sha256:28ef97b8686a0b5399129e9b763d5b7e5ff03576aa5580d6f4182a49c5fe1913 0.0s
=> => resolve docker.io/library/alpine@sha256:28ef97b8686a0b5399129e9b763d5b7e5ff03576aa5580d6f4182a49c5fe1913 0.0s
=> CACHED [linux/arm64 stage-1 2/4] RUN apk add --no-cache file && rm -rf /var/cache/apk/* 0.0s
=> CACHED [linux/arm64 builder 2/5] WORKDIR /go/src/app 0.0s
=> CACHED [linux/arm64 builder 3/5] ADD . /go/src/app/ 0.0s
=> CACHED [linux/arm64 builder 4/5] RUN CGO_ENABLED=0 go build -o main . 0.0s
=> CACHED [linux/arm64 builder 5/5] RUN mv /go/src/app/main / 0.0s
=> CACHED [linux/arm64 stage-1 3/4] COPY --from=builder /main /main 0.0s
=> ERROR exporting to oci image format 0.0s
------
> exporting to oci image format:
------
failed to solve: rpc error: code = Unknown desc = docker exporter does not currently support exporting manifest lists
I understand that the daemon can't see the manifest lists but I believe there should be a way to tag the images with some variable, like:
docker buildx build --platform linux/arm64,linux/amd64 --load -t carlosedp/test:v1-$ARCH .
To have both images loaded into the daemon and ignoring the manifest list in this case.
The limitation is temporary as daemon should get support for loading multi-arch with https://github.com/moby/moby/pull/38738 so I'm a bit hesitant to add a custom implementation for it atm.
Hi, this issue is 5 months old and the linked issue (moby/moby#38738) is still in Draft. Any news?
Hi,
I've the same issue as the original message, trying to build multi-arch image and loading to local docker instance for testing purposes.
I want to build and execute some local tests before pushing the image to the repository.
Previously for this purpose, I had used standard build command (tagging the architecture) with qemu.
Build runs fine, but at the end...
=> ERROR exporting to oci image format 0.0s
------
> exporting to oci image format:
------
failed to solve: rpc error: code = Unknown desc = docker exporter does not currently support exporting manifest lists
Build failed
make: *** [build] Error 3
Here's my environment:
docker version
Client: Docker Engine - Community
Version: 19.03.5
API version: 1.40
Go version: go1.12.12
Git commit: 633a0ea
Built: Wed Nov 13 07:22:34 2019
OS/Arch: darwin/amd64
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 19.03.5
API version: 1.40 (minimum version 1.12)
Go version: go1.12.12
Git commit: 633a0ea
Built: Wed Nov 13 07:29:19 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
docker buildx version
github.com/docker/buildx v0.3.1-tp-docker 6db68d029599c6710a32aa7adcba8e5a344795a7
[...] trying to build multi-arch image and loading to local docker instance for testing purposes.
Depending on the use case it may be sufficient when tests run on the runner's platform only. If so, this issue can be avoided by omitting the platform parameter on load. Example:
docker buildx build --platform linux/arm64,linux/amd64 -t foo/bar:latest .docker buildx build --load -t foo/bar:latest .@git-developer The current limitation is combination of --load and multiple values to --platform. Eg. --platform linux/arm64 --load works fine.
you should use --push on multi-platform , use --load for single platform。
The pipeline in the project I'm working on runs tests before pushing. Do I have to build the image once for the test and then a second time for production?
Is there any workaround to run a multiarch container before pushing it to a repo?
@Filius-Patris You're options are:
docker run, then build multi-arch image. Cache from the first build will be reused.I also landed here and I'm not sure what the options are, on a practical level it seems like a hack to support "docker build" commands and docker buildx to get around the issue.
How would I tag an image with a version and latest?
I'm hitting this as well.. any updates?
The pipeline in the project I'm working on runs tests before pushing. Do I have to build the image once for the test and then a second time for production?
Is there any workaround to run a multiarch container before pushing it to a repo?
Same problem for me, i have to build with --push on each gitlab-ci stages... using --platform linux/arm/v7,linux/amd64
Most helpful comment
Hi, this issue is 5 months old and the linked issue (moby/moby#38738) is still in Draft. Any news?