You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用libvirt-java创建持久化并自动启动的网络?

解决libvirt-java创建持久化并自动启动网络的问题

问题原因

你当前使用的networkCreateXML方法创建的是临时(transient)网络,这类网络仅存在于当前libvirt会话中,重启后会消失,因此不支持设置自动启动(autostart),这就是报错的核心原因。

正确实现步骤

要创建持久化(persistent)且自动启动的网络,需要改用networkDefineXML方法——它会将网络配置保存到libvirt的持久化存储目录(如/etc/libvirt/qemu/networks/),之后再启动网络并设置自动启动:

Connect connect = new Connect("qemu:///system", false);
// 定义持久化网络(此时网络处于未激活状态)
Network network = connect.networkDefineXML("""
        <network>
          <name>foo</name>
          <forward mode='nat'>
            <nat>
              <port start='1024' end='65535'/>
            </nat>
          </forward>
          <bridge name='virfoo' stp='on' delay='0'/>
          <ip address='192.168.99.1' netmask='255.255.255.0'/>
        </network>
        """);
// 启动网络
network.start();
// 设置自动启动
network.setAutostart(true);

验证结果

执行上述代码后,运行virsh net-list --all可看到网络状态:

Name      State    Autostart   Persistent
--------------------------------------------
 default   active   yes         yes
 foo       active   yes         yes

已存在临时网络的转换方法

如果已经创建了临时的foo网络,可按以下步骤转为持久化:

  1. 停止临时网络:
    network.destroy();
    
  2. 导出临时网络的XML配置:
    String xml = network.getXMLDesc(0);
    
  3. 删除临时网络:
    network.delete();
    
  4. 用导出的XML调用networkDefineXML定义持久化网络,再执行启动和设置自动启动的步骤。

内容的提问来源于stack exchange,提问作者artpi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:44:59