Docker image compabillity between amd64 and x86_64 platforms

I have built a docker image (“docker build -t tagname .”) based on debian:bookworm at an amd64 platform. I saved this image (“docker image save <image id> | gzip > image.tgz”). I copied this image to an x68_64 platform and tried to load the copied image (“docker load < load image.tgz”). However I got the following message:

image might be filtered out

and “docker images” does no show the loaded image

When doing the reverse that is building at the x86_64 machine, saving it, copying to an amd64 machine and loading that image everything is working fine.

Is this normal behavior and if not what can cause this?

amd64 and x86_64 is basically the same. Depending on where you see architecture information, you could see amd64 or x86_64, but these are not different architectures.

Do you really see “image might be filtered out” or was it a comment after you tried to upload a screenshot maybe? I have no idea what that message could mean.

NOTE: I edited your post to convert your shared commands to code. Please, use markdown code blocks or the code block button on the GUI (</>) to format any terminal output, code, logs.

At my amd64 machine:

[ machine_a: /local/ctrommel ] 
bash> uname -a
Linux linws12.aimsys.nl 6.1.0-17-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.69-1 (2023-12-30) x86_64 GNU/Linux
[ machine_a: /local/ctrommel ] 
bash> md5sum image.tgz 
e66aedf056bd948aa8a21bfa4a95ab8f  image.tgz
[ machine_a: /local/ctrommel ] 
bash> docker load < image.tgz
Loaded image ID: sha256:c66518bf2154903b23db57b6cdfedf2de35dcf49a5cb45bf8578ba4e25ebaf25

At my x86_64 machine:

[ctrommel@machine_b ctrommel]$ uname -a
Linux machine_b 5.14.0-570.32.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Aug 8 18:29:23 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
[ctrommel@machine_b ctrommel]$ md5sum image.tgz
e66aedf056bd948aa8a21bfa4a95ab8f  image.tgz
[ctrommel@machine_b ctrommel]$ docker load < image.tgz 
image might be filtered out

Thanks for formatting

Thank you for sharing the two outputs. Now I understand the error message. The difference in the architecture is because of the difference in the Linux distributions. I believe, on Debian, you see amd64 and on RedHat-based machines, you see x86_64, but it is the same

x86-64 (also known as x64 , x86_64 , AMD64 , and Intel 64 )

I also think you could pull images built for other architectures, you could just not run it without an emulator.
Even the documentation confirms it:

docker load loads all platform variants that are present in the archive. Use the --platform option to specify which platform variant of the image to load.

Then there is this at the end of that page

The following example attempts to load a linux/ppc64le image from an archive, but the given platform is not present in the archive;

 docker image load -i image.tar --platform=linux/ppc64le
requested platform (linux/ppc64le) not found: image might be filtered out

But in the above example Docker was instructed to load a specific variant built for a specific platform. Since that is not in the tar file, it is not possible. If you get “image might be filtered out”, I assume the tgz file doesn’t actually contain the image.

I would check the content of the tgz file before loading it. Or you could try loading the image on the same machine where you saved it.

If that works and and loading it fails only on the other machine, the next step could be that we ask more information about your environment. More specifically the two Docker installation including versions and installation methods.

I would check the contect of the tgz file before loading it. Or you could try loading the image on the same machine where you saved it.

I tried this and it was successful, see my previous reply (the same tgz build/saved at machine_a loads fine on machine_a but not on machine_b).

machine_a has docker version 25.0.1 and machine_b has docker version 29.2.1. docker at machine_a is configured as rootless and machine_b not.

Sorry, I missed that. Many things changed between Docker 25 and 29, but it should probbaly not affect image save and load, so I tried disabling and enabling the containerd snapshotter which stores images in containerds data root and enabled by default in new Docker versions. I could still save images when it was disabled and load when it was enabled.

Docker CE v25 is not supported today, but I don’t know if the image save/load compatibility between the too is still supperted. I tried to look for changes between the two versions and I found something about platforms

It was not about v25, but I can imagine similar issues. I’m curious, do you get the same error when you try to specify the platform when loading the image?

docker load --platform linux/amd64 < image.tgz 

If it doesn’t work, you could also try saving the image that way first

docker save --platform linux/amd64 <image tag> | gzip > image.tgz

and then try loading it with the platform option again.

I will think about other possibly solutions.