
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
该容器设计用于运行在CoreOS或Flatcar Linux等最小容器操作系统上,此类系统运行于QEMU/KVM、Proxmox或其他基于libvirt的虚拟机中。这些操作系统通常没有包管理系统,难以直接安装QEMU客户机代理。
在虚拟机配置中启用QEMU Guest Agent通道:
| 虚拟机主机 | 启用Guest Agent方法 |
|---|---|
| QEMU / Virtual Machine Manager | 添加Guest Agent Channel设备(org.qemu.guest_agent.0) |
| Proxmox | 启用QEMU Guest Agent选项 |
bashdocker run --rm -d --name qemu-ga \ -v /etc/os-release:/etc/os-release:ro \ --device /dev/virtio-ports/org.qemu.guest_agent.0:/dev/virtio-ports/org.qemu.guest_agent.0 \ --net=host \ --uts=host \ docker.io/danskadra/qemu-ga
此命令将允许Guest Agent获取容器所在虚拟机的操作系统信息、主机名和IP地址。
如果需要Guest Agent提供更多功能(如非ACPI虚拟机的重启和关机),可使用以下命令(以CoreOS为例):
bashdocker run --rm -d --name qemu-ga \ -v /dev:/dev \ -v /etc/os-release:/etc/os-release:ro \ -v /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket \ -v /sys/fs/cgroup:/sys/fs/cgroup \ -v /sbin/shutdown:/sbin/shutdown \ -v /bin/systemctl:/bin/systemctl \ -v /usr/lib/systemd:/usr/lib/systemd \ -v /lib64:/lib64 \ --privileged \ --uts=host \ --net=host \ docker.io/danskadra/qemu-ga -v
⚠ 此配置安全性较低,因为容器以特权模式运行,通常具有对主机虚拟机的完全访问权限。
QEMU Guest Agent依赖/sbin/shutdown命令执行重启和关机操作。在CoreOS等基于Systemd的操作系统上,shutdown命令是systemctl的符号链接。为使容器能够执行这些命令,需要映射相关命令及Systemd所需的socket和cgroup依赖:
bash-v /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket \ -v /sys/fs/cgroup:/sys/fs/cgroup \ -v /sbin/shutdown:/sbin/shutdown \ -v /bin/systemctl:/bin/systemctl \
当主机操作系统与容器基础操作系统不匹配时,绑定挂载命令可能导致依赖问题。编译的命令链接到特定版本的GCC和其他库文件,这些库文件版本因发行版甚至同一发行版的不同版本而异。
例如,将CoreOS的systemctl命令挂载到基于Alpine的容器中时,容器可能缺少主机VM的依赖库。解决方法是将所需库绑定挂载到容器中。使用ldd命令(在主机VM上运行)发现挂载命令的依赖:
bashldd /bin/systemctl linux-vdso.so.1 (0x00007ffd2117d000) libsystemd-shared-251.11-2.fc37.so => /usr/lib/systemd/libsystemd-shared-251.11-2.fc37.so (0x00007f8d1d600000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f8d1da85000) libc.so.6 => /lib64/libc.so.6 (0x00007f8d1d423000) # 其他依赖库...
在此示例中,CoreOS的systemctl需要位于/lib64和/usr/lib/systemd/libsystemd-shared-251.11-2.fc37.so的库。由于Alpine容器没有/lib64或/usr/lib/systemd目录,可从主机VM挂载整个目录:
bash-v /sbin/shutdown:/sbin/shutdown -v /bin/systemctl:/bin/systemctl -v /usr/lib/systemd:/usr/lib/systemd -v /lib64:/lib64
注意: 如果主机VM的shutdown或systemctl命令链接到/lib或/usr/lib目录(Alpine容器中存在这些目录),可能需要将每个依赖库单独绑定挂载到容器的相同目录。
| 选项 | 描述 |
|---|---|
-v /etc/os-release:/etc/os-release:ro | 只读访问VM操作系统信息 |
--device [VirtIO Serial Port]:[VirtIO Serial Port] | (必填)Agent与主机VM的通信通道 |
--uts=host | 允许Guest Agent读取VM主机名 |
--net=host | 允许Guest Agent读取主机VM的网络信息 |
QEMU Guest Agent设计用于直接与主机操作系统交互。为使容器内运行的Guest Agent能够访问主机,容器可能需要扩展权限,通常通过--privileged选项实现。这会授予容器超出所需的过多权限(如获取IP地址、主机名、OS版本等基本可见性功能)。
可通过使用--device选项和绑定挂载特定文件替代--privileged来提高安全性,仅授予访问VirtIO Guest Agent设备的权限,而非所有/dev设备或--privileged提供的其他权限。
如果需要与主机VM进行更多交互(如重启和关闭VM),则需要更多权限,可通过--privileged选项或--cap-add选项添加特定功能来实现。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务