从Docker容器通过网络访问KVM VM

时间:2017-05-06 13:15:03

标签: networking docker routing kvm virtual-network

KVM用于托管网络192.168.2.1/24中的某些VM。 Docker在192.168.3.1/24中的同一台机器上运行。我需要配置网络,以便Docker容器可以访问KVM VM。出于测试目的,我有两台机器,每台机器运行一个Web服务器,使用wget测试工作连接:

192.168.3.2上的Docker Container

KVM VM on 192.168.2.2

在KVM中,我将虚拟网络配置为重定向到所有物理网络。这允许我从A KVM VM访问Docker容器。但是不工作则相反:从Docker容器(192.168.3.2)访问KVM VM(192.168.2.2)。

docker network create --driver=bridge --subnet=192.168.3.1/24 my-network

容器的启动方式如下:

docker run --name=gogs --network=my-network --ip=192.168.3.2 -v /var/gogs:/data gogs/gogs

缺少Docker的KVM虚拟网络向导是什么?

net.ipv4.ip_forward=1已启用

/etc/sysctl.conf,我使用sysctl --system重新加载。

Docker网络接口

br-7b4175d9379d: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
    inet 192.168.3.1  netmask 255.255.255.0  broadcast 0.0.0.0
    inet6 fe80::42:9ff:fe6b:75dd  prefixlen 64  scopeid 0x20<link>
    ether 02:42:09:6b:75:dd  txqueuelen 0  (Ethernet)
    RX packets 90  bytes 41977 (41.9 KB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 116  bytes 18172 (18.1 KB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

KVM网络接口

virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.1  netmask 255.255.255.0  broadcast 192.168.2.255
        ether 52:54:00:85:7f:95  txqueuelen 1000  (Ethernet)
        RX packets 1463  bytes 101054 (101.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1214  bytes 1490407 (1.4 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

1 个答案:

答案 0 :(得分:1)

您可以在同一网络桥上运行KVM / libvirt和Docker。假设您的KVM桥接器为virbr0。

首先按照Docker documentation中的建议创建配置文件/etc/docker/daemon.json,其中包含以下内容(甚至不需要iptables行):

{
"bridge": "virbr0",
"iptables": false
}

与停止容器并重新启动docker daemon服务相比,

systemctl restart docker

Docker应该选择您的KVM桥接器,并且当您重新启动现有容器时,它们将在virbr0地址空间而不是默认docker0中获取IP地址。

我不得不做两次才能使其正常工作,但这听起来像运行docker v18.09一样简单。现在,我的VM和容器在同一网段上运行。