This guide is for running docker2vm on macOS (Apple Silicon or Intel).
docker2vm includes a pinned Gondolin runtime dependency (@earendil-works/gondolin@0.2.1) to resolve guest assets during conversion.
Install tools using their official docs/download pages:
- Bun: https://bun.com/
- QEMU: https://www.qemu.org/download/
- e2fsprogs: https://e2fsprogs.sourceforge.net/
If you want Dockerfile conversion (dockerfile2gondolin), also install Docker Desktop:
With Homebrew, e2fsprogs is often keg-only. docker2vm checks common Homebrew locations automatically, so a PATH change is usually not required for normal usage.
If you want to run mke2fs / debugfs manually in your shell:
export PATH="$(brew --prefix e2fsprogs)/sbin:$PATH"To persist it, add that export PATH=... line to your shell profile (~/.zshrc, ~/.bashrc, ~/.profile, etc.).
docker2vm is tested with @earendil-works/gondolin@0.2.1 and can fetch guest assets automatically during conversion.
Gondolin CLI docs:
Package page:
bun --version
qemu-system-aarch64 --version || qemu-system-x86_64 --version
"$(brew --prefix e2fsprogs)/sbin/mke2fs" -V
"$(brew --prefix e2fsprogs)/sbin/debugfs" -V
gondolin --help >/dev/nullbun run test
bun run typecheck
bun run buildUse a platform that matches the architecture you will run in Gondolin.
- Apple Silicon (
uname -m=>arm64): uselinux/arm64 - Intel Mac (
uname -m=>x86_64): uselinux/amd64
oci2gondolin defaults automatically from host arch if --platform is omitted, but passing it explicitly is recommended.
Example:
bun run oci2gondolin -- \
--image busybox:latest \
--platform linux/arm64 \
--mode assets \
--out ./out/busybox-assetsApple Silicon:
INTEGRATION_PLATFORM=linux/arm64 bun run test:integration
PLATFORM=linux/arm64 bun run e2e:smokeIntel Mac:
INTEGRATION_PLATFORM=linux/amd64 bun run test:integration
PLATFORM=linux/amd64 bun run e2e:smokedocker2vm should find common Homebrew locations automatically. If your install uses a custom prefix, either add it to PATH or point GONDOLIN_GUEST_DIR to prepared assets and verify e2fsprogs binaries are installed.
Some images include paths that conflict on case-insensitive filesystems.
Use a case-sensitive APFS location for temporary work/output (for example, a case-sensitive volume) and retry.