Unable to run aarch64 containers from armv7 Docker?

Docker would seem ideal for running 64-bit programs when otherwise constrained to a 32-bit environment, such as Raspbian. However, with an aarch64 kernel but 32-bit userland (including 32-bit Docker binaries), here’s what happens when I try:

pi@raspberrypi:~ $ docker run -it arm64v8/debian
pi@raspberrypi:~ $ echo $?

The docker command just fails without printing anything and returns exit code 159, while it works fine if I run a 32-bit container. By comparison, if I try the opposite scenario and run arm32v7/debian from 64-bit Docker on a 64-bit Raspberry Pi OS, that works.

Furthermore, if I go back to Raspbian32 with the 64-bit kernel and try a similar exercise with LXC or chroot instead of Docker, they can run 64-bit programs just fine. Any fundamental reason that Docker can’t achieve the same?

  • Issue type: bug/feature request?
  • OS Version/build: Raspbian GNU/Linux 9.3 (stretch), kernel: Linux raspberrypi 4.14.34-v8+ #1 SMP PREEMPT Tue Apr 17 02:45:42 PDT 2018 aarch64 GNU/Linux
  • App version: Docker version 18.09.0, build 4d60db4
  • Steps to reproduce: Install Crazyhead90’s Raspbian w/ 64-bit kernel image, then:
curl -fsSL https://get.docker.com -o get-docker.sh
sed -i.bak 's/$(uname -m)/armv7l/' get-docker.sh
chmod +x get-docker.sh
sudo usermod -aG docker $USER #then reboot if necessary

docker run -it arm64v8/debian