https://github.com/tonistiigi/binfmt
Cross-platform emulator collection distributed with Docker images.
https://github.com/tonistiigi/binfmt
docker qemu
Last synced: 4 months ago
JSON representation
Cross-platform emulator collection distributed with Docker images.
- Host: GitHub
- URL: https://github.com/tonistiigi/binfmt
- Owner: tonistiigi
- License: mit
- Created: 2020-02-28T03:16:08.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2025-03-04T10:09:29.000Z (over 1 year ago)
- Last Synced: 2025-04-11T02:51:36.152Z (about 1 year ago)
- Topics: docker, qemu
- Language: Go
- Homepage:
- Size: 4.19 MB
- Stars: 1,121
- Watchers: 15
- Forks: 81
- Open Issues: 37
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Binfmt
[](https://github.com/tonistiigi/binfmt/releases/latest)
[](https://github.com/tonistiigi/binfmt/actions?query=workflow%3Aci)
[](https://goreportcard.com/report/github.com/tonistiigi/binfmt)
[](https://hub.docker.com/r/tonistiigi/binfmt/)
Cross-platform emulator collection distributed with Docker images.
## Build local binaries
```bash
docker buildx bake
```
This builds the qemu-user emulator binaries for your local plaform to the `bin` directory.
## Build test image
```bash
REPO=myuser/binfmt docker buildx bake --load mainline
docker run --privileged --rm myuser/binfmt
```
Prints similar to:
```
{
"supported": [
"linux/amd64",
"linux/arm64",
"linux/riscv64",
"linux/ppc64le",
"linux/s390x",
"linux/386",
"linux/arm/v7",
"linux/arm/v6"
],
"emulators": [
"qemu-aarch64",
"qemu-arm",
"qemu-i386",
"qemu-ppc64le",
"qemu-riscv64",
"qemu-s390x"
]
}
```
## Installing emulators
```bash
docker run --privileged --rm tonistiigi/binfmt --install all
docker run --privileged --rm tonistiigi/binfmt --install arm64,riscv64,arm
```
## Installing emulators from Docker-Compose
```docker
version: "3"
services:
emulator:
image: tonistiigi/binfmt
container_name: emulator
privileged: true
command: --install all
network_mode: bridge
restart: "no"
```
Only use container `restart-policy` as `no`, otherwise docker will keep restarting the container.
## Uninstalling emulators
```bash
docker run --privileged --rm tonistiigi/binfmt --uninstall qemu-aarch64
```
Emulator names can be found from the status output.
You can also uninstall all archs for a specific emulator:
```bash
docker run --privileged --rm tonistiigi/binfmt --uninstall qemu-*
```
## Display version
```bash
docker run --privileged --rm tonistiigi/binfmt --version
```
```
binfmt/9a44d27 qemu/v6.0.0 go/1.15.11
```
## Development commands
```bash
# validate linter
./hack/lint
# validate vendored files
./hack/validate-vendor
# update vendored files
./hack/update-vendor
# test, only run on nodes where you allow emulators to be installed in kernel
./hack/install-and-test
```
## Test current emulation support
```
docker run --rm --platform linux/arm64 alpine uname -a
docker run --rm --platform linux/arm/v7 alpine uname -a
docker run --rm --platform linux/ppc64le alpine uname -a
docker run --rm --platform linux/s390x alpine uname -a
docker run --rm --platform linux/riscv64 alpine uname -a
```
## `buildkit` target
This repository also provides helper for BuildKit's automatic emulation support https://github.com/moby/buildkit/pull/1528.
These binaries are BuildKit specific and should not be installed in kernel with `binfmt_misc`.
## Licenses
MIT. See `LICENSE` for more details.
For QEMU see https://wiki.qemu.org/License