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"

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
MacOS OrbStack 容器配置
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务