クロスDockerのためのDockerfileという記事を以前書いたのですが、現在のバージョンのdockerではDockerfileを書かなくてもすむようになっていました。
Ubuntu 18.04 を使用しています。
docker run を実行
$ docker run -it arm64v8/ubuntu:18.04
standard_init_linux.go:195: exec user process caused "no such file or directory"
これはアーキテクチャが異なるので実行はエラーになります。
スタティックリンクされたqemuをコンテナの中にコピーする
まずはコンテナIDを確認。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
388345ce4956 arm64v8/ubuntu:18.04 "/bin/bash" 19 minutes ago Exited (0) 39 seconds ago goofy_agnesi
$
そのコンテナの中にqemu-aarch64-static
をコピーする。これはx86_64の実行ファイル。
sudo apt install qemu-user-static
docker cp /usr/bin/qemu-aarch64-static 388345ce4956:/usr/bin/qemu-aarch64-static
コンテナをcommit してdocker image を作成
$ docker commit 388345ce4956 arm64v8/ubuntu:18.04_cross
sha256:2ae592d2c21dd0f77954f83152e26fb17816e83aa94855a59bfe0e18ac8fe963
docker run を実行
今度は正常に実行できます。
$ docker run -it arm64v8/ubuntu:18.04_cross
root@828eebd24c03:/# ls
bin dev home media opt root sbin sys usr
boot etc lib mnt proc run srv tmp var
root@828eebd24c03:/# uname -a
Linux 828eebd24c03 4.15.0-36-generic #39-Ubuntu SMP Mon Sep 24 16:19:09 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux