According to Stephane Graber who is in charge of the LXC/LXD project (in response to an inquiry from me on their discussions site):
qemu-user-static is a binfmt helper which lets you do on the fly
conversion between architectures. It effectively lets you run binaries
for architectures other than your current one.
qemu-user-static itself should work fine inside a container and will
let you run some binaries of foreign architectures inside it.
Trying to run an entire container through qemu-user-static is very
impractical due to some big limitations of qemu-user-static, for
example, anything that relies on ptrace (init systems and debugging
tools), netlink (all the network tools and some init systems) or
thread (a lot more software) will usually fail miserably.
The approach I implemented back in LXC was to create a mixed container
where most packages were of the foreign architecture but the init
system, network tools, … were of the native architecture. This was
kinda-working but also not particularly useful, not to mention very
As this is effectively unsupportable as far as we’re concerned, we are
not providing any foreign-architecture images for LXD. You could
however build your own by assembling a rootfs of a foreign
architecture, then including the needed qemu-user-static binaries,
replacing any binary that will not work with emulation and generate
this as a LXD image (marking it with the architecture it’s intended to
run on rather than the architecture it contains).
So, effectively, attempting to run a foreign architecture on LXD is unsupported, and the LXC method was more or less a 'mixed environment' type of hack.
It sounds like it could also be done, but would require you to create a rootfs of a foreign architecture and basically create the 'image' yourself that runs all this, which for various reasons could be a headache and a lot of work to accomplish.