我在局域网中有几台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设置?
我确实做了很多搜索,但是没有人问类似的问题。
谢谢。