---
url: /manual/runtimes.md
description: Docker、Podman、LXC、Incus 与 libvirt 如何接入 mayami 网段
---

# 容器与虚拟机运行时

运行时负责创建客人网卡；mayami 负责网桥地址、DHCP/RA/DNS、规则和可选 capture。两种 owner 不要同时管理同一座桥的地址或 DHCP。

## 完整配置

```yaml check
docker: {}

networks:
  lab:
    address: [10.10.0.1/24]
    capture: false
    dhcp:
      range: 10.10.0.100-10.10.0.199

outbounds:
  direct:
    type: direct

route:
  final: direct

dns:
  servers:
    real: {type: udp, address: 1.1.1.1:53}
  final: real
```

先运行 `mayami check`，再确认 `ip -br link show lab`。`capture: false` 时这是纯网段服务；需要规则接管代理流时改为 `true` 并配置 capture 入站。

## Docker

```sh
docker network create -d bridge \
  --ipam-driver mayami --ipam-opt network=lab \
  -o com.docker.network.bridge.name=lab \
  -o com.docker.network.bridge.inhibit_ipv4=true \
  -o com.docker.network.bridge.enable_ip_masquerade=false \
  lab

docker run --rm --network lab --dns 10.10.0.1 \
  alpine:3 sh -c 'ip -br addr; nslookup example.com'
```

Docker 28 起，内置 DNS 对外的查询从宿主命名空间发出，不经过网桥来源规则，因此容器必须用 `--dns 10.10.0.1`，或把 Docker daemon 的 DNS 固定到该地址。插件只分配已有网段前缀，不建桥、不改成员/NAT，也不接受 `external` 网段。

## Podman

root Podman 使用 netavark 的 unmanaged 模式和 DHCP：

```sh
systemctl enable --now netavark-dhcp-proxy.socket
podman network create \
  --interface-name lab \
  --opt mode=unmanaged \
  --ipam-driver dhcp \
  --disable-dns \
  lab
```

rootless Podman 默认用 pasta，不接宿主机的 `lab` 桥；不要为了接入而关闭 rootless 隔离。

## LXC 与 Incus

::: code-group

```ini [LXC]
lxc.net.0.type = veth
lxc.net.0.link = lab
lxc.net.0.flags = up
lxc.net.0.name = eth0
```

```sh [Incus]
incus profile device add default eth0 \
  nic nictype=bridged parent=lab
```

:::

## libvirt/KVM

```xml
<interface type='bridge'>
  <source bridge='lab'/>
  <model type='virtio'/>
  <driver name='vhost'/>
</interface>
```

## external 网桥

如果桥由 libvirt、Incus 或系统先创建并持续管理，在配置里写 `external: true`。mayami 只核对地址并提供 DHCP/RA/DNS；不要让两个 DHCP 服务管理同一座桥。需要 capture 时注意 `fail: closed` 的就绪屏障会短暂停整桥转发。

## 相关

* [networks](/manual/networks)
* [networks 配置](/configuration/networks/)
* [external](/configuration/networks/external)
* [安装](/getting-started/install)
