Detecting the platform when running a Docker based build
Common advice is to use
uname -m or
arch commands which should report something like
i686 for 64 or 32-bit flavours of Linux running on Intel-esque systems. This works fine when running on a real machine, but all falls apart when querying on 32 bit docker image running on a 64-bit host, since these commands query the underlying operating system kernel rather than the platform of the container.
A workaround is to look at the system’s binaries. The Elf format header specifies that the fourth byte of the header will either be
02 for a 32 or 64-bit system, so we can look at an assumed-available binary (such as
/bin/bash) and pull out the relevant information.