Why are docker images - architecture specific?

What is the expected contents of a docker image? An application + all supporting libraries and any other required files.
What does that normally mean in practice? Basically a trimmed down Linux userland + the application.

Of course not every single file is architecture specific, but the binaries and libraries were compiled for some specific architecture (this is obviously the case whether they were placed in a docker image or not).

There is no magic going on here, the docker image is just a means of packaging and distributing the application. It doesn't transform an application compiled for x86-64, arm64, or whatever into being architecture agnostic.

And if the application is in some non-compiled language, like a Python application or Nodejs application, then the above just applies to the runtime instead; the Python runtime or Nodejs runtime was built for some specific architecture and needs the appropriate supporting libraries built for that same architecture.