如何使用手动创建的网桥为Docker容器设置静态IP

时间:2018-10-17 01:25:31

标签: docker ubuntu

我在局域网中有几台PC(主机),并希望在这些主机中创建的docker容器自由地相互通信(并与主机通信)。

我在主机中创建了自定义网桥(不是通过docker network create,而是手动创建的)。我的netplan类似于(对于其中一台主机,每个主机都具有相似的设置,但br0的IP地址不同):

    version: 2
    renderer: networkd
    ethernets:
            enp0s31f6:
                    dhcp4: no
                    dhcp6: no
    bridges:
            br0:
                    interfaces: [enp0s31f6]
                    dhcp4: no
                    addresses: [192.168.101.11/24]
                    gateway4: 192.168.101.1
                    nameservers:
                            addresses: [192.168.1.1]
                    parameters:
                            forward-delay: 0
                            stp: false

我还更改了docker的/etc/docker/daemon.json,并添加:

{
        "bridge":"br0"
}

我想用预定义的静态IP创建docker容器,但是我很难自动做到这一点。

1)首先,我尝试使用

sudo docker run -i -t ubuntu:18.04 /bin/bash

泊坞窗将为我创建固定的静态IP,但将从192.168.101.1(这是我的外部网关的IP)开始,因此该IP不起作用。

再次输入命令,它将为我创建第二个容器,其IP为192.168.101.2,并且该IP有效!

2)我尝试使用管道工程(https://github.com/jpetazzo/pipework/blob/master/pipework

sudo pipework br0 container-id 192.168.101.20/24@192.168.101.1

此命令有效,并将在我的IP地址为192.168.101.20的docker容器中创建eth1。

如果我在容器中使用ifconfig,我将看到eth0(由docker创建的IP 192.168.101.1)和eth1(IP 192.168.101.20)。尽管192.168.101.20可以工作,但是eth0部分还是很可疑,我不确定它是否会干扰本地网络中的真实网关。

我的问题如下。

使用此手动创建的br0,分配Docker容器静态IP地址的最佳方法是什么?管道工作似乎可行,但我仍然需要删除eth0。是否有可能通知docker仅更改eth0 IP地址?还是可以让管道直接在Docker容器中修改eth0设置?

我确实做了很多搜索,但是没有人问类似的问题。

谢谢。

0 个答案:

没有答案