qemux/qemuQEMU Docker镜像是一个在容器中运行虚拟机的解决方案,通过Docker容器化技术简化虚拟机的部署与管理。该镜像提供Web界面控制,支持多种磁盘格式,并集成KVM加速、内核模式网络等高性能特性,适合快速搭建隔离的虚拟机环境,适用于开发测试、操作系统学习等场景。
yamlservices: qemu: image: qemux/qemu container_name: qemu environment: BOOT: "mint" # 指定要安装的操作系统 devices: - /dev/kvm # KVM设备,用于硬件加速 - /dev/net/tun # 网络隧道设备 cap_add: - NET_ADMIN # 添加网络管理权限 ports: - 8006:8006 # Web界面端口映射 volumes: - ./qemu:/storage # 存储目录挂载 restart: always stop_grace_period: 2m # 停止宽限期
bashdocker run -it --rm --name qemu -e "BOOT=mint" -p 8006:8006 \ --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN \ -v "${PWD:-.}/qemu:/storage" --stop-timeout 120 docker.io/qemux/qemu
shellkubectl apply -f [***]
 | 无 |
DISK_SIZE | 磁盘大小(如"128G") | "64G" |
RAM_SIZE | 内存大小(如"8G") | "2G" |
CPU_CORES | CPU核心数(如"4") | "2" |
BOOT_MODE | 启动模式,"uefi"或"legacy"(传统BIOS) | "uefi" |
DISK_TYPE | 磁盘类型,"scsi"、"blk"或"ide" | "scsi" |
DHCP | 是否通过路由器获取IP("Y"或"N") | "N" |
ARGUMENTS | 传递给QEMU的额外参数 | 无 |
DEBUG | 是否启用调试模式("Y"或"N") | "N" |
/storage: 虚拟机存储目录,用于存放磁盘镜像等数据,建议通过宿主机目录或命名卷挂载/boot.iso、/boot.img、/boot.qcow2: 本地镜像文件挂载,挂载后BOOT变量将被忽略--device=/dev/kvm: 启用KVM硬件加速(需宿主机支持)--device=/dev/net/tun: 启用网络隧道--cap-add=NET_ADMIN: 添加网络管理权限,支持网络配置非常简单,步骤如下:
BOOT变量指定要安装的操作系统通过BOOT环境变量指定要下载的操作系统,例如:
yamlenvironment: BOOT: "mint"
支持的操作系统及大小如下表:
| 值 | 操作系统 | 大小 |
|---|---|---|
alma | Alma Linux | 2.2 GB |
alpine | Alpine Linux | 60 MB |
arch | Arch Linux | 1.2 GB |
cachy | CachyOS | 2.6 GB |
centos | CentOS | 7.0 GB |
debian | Debian | 3.3 GB |
fedora | Fedora | 2.3 GB |
gentoo | Gentoo | 3.6 GB |
kali | Kali Linux | 3.8 GB |
kubuntu | Kubuntu | 4.4 GB |
mint | Linux Mint | 2.8 GB |
manjaro | Manjaro | 4.1 GB |
mx | MX Linux | 2.2 GB |
nixos | NixOS | 2.4 GB |
suse | OpenSUSE | 1.0 GB |
rocky | Rocky Linux | 2.1 GB |
slack | Slackware | 3.7 GB |
tails | Tails | 1.5 GB |
ubuntu | Ubuntu Desktop | 6.0 GB |
ubuntus | Ubuntu Server | 3.0 GB |
xubuntu | Xubuntu | 4.0 GB |
zorin | Zorin OS | 3.8 GB |
有两种方式使用自定义镜像:
通过URL下载:将BOOT变量设置为镜像文件的URL,支持.iso、.img等格式及压缩文件(会自动解压),例如:
yamlenvironment: BOOT: "[***]"
本地文件挂载:将本地镜像文件挂载到容器中,例如:
yamlvolumes: - ./example.iso:/boot.iso # 或/boot.img、/boot.qcow2
此时BOOT变量将被忽略。
通过卷挂载修改存储目录,例如:
yamlvolumes: - ./自定义目录:/storage # 将./自定义目录替换为宿主机实际目录或命名卷
通过DISK_SIZE环境变量设置磁盘大小(默认64G),例如:
yamlenvironment: DISK_SIZE: "128G" # 支持增大现有磁盘,不会丢失数据
[!TIP] 此参数也可用于扩容现有磁盘,且不会导致数据丢失。
默认分配2核CPU和2GB内存,可通过以下环境变量调整:
yamlenvironment: RAM_SIZE: "8G" # 内存大小,如"4G"、"8G" CPU_CORES: "4" # CPU核心数,如"2"、"4"
使用qemu-arm容器运行ARM64架构的镜像。
建议使用dockur/windows,该镜像包含安装所需的驱动及更多功能。
建议使用dockur/macos,该镜像已配置正确的设置并自动下载安装文件。
默认启用UEFI启动,若操作系统不支持,可通过BOOT_MODE变量切换为传统BIOS:
yamlenvironment: BOOT_MODE: "legacy"
默认使用virtio-scsi驱动以提高性能,若操作系统无法识别磁盘,可通过DISK_TYPE变量修改:
yamlenvironment: DISK_TYPE: "blk" # 或"ide"(兼容性好但速度慢)
首先检查软件兼容性:
| 产品 | Linux | Win11 | Win10 | macOS |
|---|---|---|---|---|
| Docker CLI | ✅ | ✅ | ❌ | ❌ |
| Docker Desktop | ❌ | ✅ | ❌ | ❌ |
| Podman CLI | ✅ | ✅ | ❌ | ❌ |
| Podman Desktop | ✅ | ✅ | ❌ | ❌ |
在Linux系统中,通过以下命令检查硬件支持:
bashsudo apt install cpu-checker sudo kvm-ok
若kvm-ok提示不支持KVM,需检查:
ports中添加端口映射,例如- 2222:22将虚拟机22端口映射到宿主机2222端口USER_PORTS变量中指定端口,例如USER_PORTS: "22,80,443"创建macvlan网络使容器获得独立IP:
bashdocker network create -d macvlan \ --subnet=192.168.0.0/24 \ # 替换为宿主机子网 --gateway=192.168.0.1 \ # 替换为网关IP --ip-range=192.168.0.100/28 \ # IP范围 -o parent=eth0 vlan # 替换为宿主机网卡
在Compose文件中使用该网络:
yamlservices: qemu: ... networks: vlan: ipv4_address: 192.168.0.100 # 分配的IP networks: vlan: external: true
[!IMPORTANT] 由于macvlan设计限制,容器IP无法从Docker宿主机直接访问,需创建第二个macvlan作为 workaround。
配置macvlan网络后,通过以下设置使虚拟机成为家庭网络的一部分(容器和虚拟机将有独立IP):
yamlenvironment: DHCP: "Y" devices: - /dev/vhost-net device_cgroup_rules: - 'c *:* rwm'
通过环境变量和卷挂载添加额外磁盘:
yamlenvironment: DISK2_SIZE: "32G" # 第二个磁盘大小 DISK3_SIZE: "64G" # 第三个磁盘大小 volumes: - ./存储目录2:/storage2 # 第二个磁盘存储目录 - ./存储目录3:/storage3 # 第三个磁盘存储目录
通过devices挂载物理磁盘或分区:
yamldevices: - /dev/sdb:/disk1 # 主磁盘 - /dev/sdc1:/disk2 # 次要磁盘(/disk2及以上)
lsusb命令获取设备的vendorid和productid(如0x1234:0x1234)yamlenvironment: ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234" # 替换为实际ID devices: - /dev/bus/usb
若客户机支持9pfs,可通过以下步骤共享文件:
yamlvolumes: - ./共享目录:/shared # ./共享目录为宿主机目录
shellmount -t 9p -o trans=virtio shared /mnt/共享目录 # /mnt/共享目录为客户机挂载点
通过ARGUMENTS环境变量传递额外参数:
yamlenvironment: ARGUMENTS: "-device usb-tablet" # 示例:添加USB平板设备
若要查看完整QEMU命令行参数,启用调试模式:
yamlenvironment: DEBUG: "Y"



manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务