docker-compose创建的网络不遵守Docker的子网设置

时间:2018-12-27 18:57:27

标签: docker docker-compose

我在公司网络配置方面遇到问题,因此我不得不修改Docker的默认子网,如this KB article中所述。

这对我的大多数容器都有效,但是我仍然对其中一些容器有疑问。检查使用中的网络后,我仍然看到Docker分配的IP地址超出了允许范围。

例如,这是我的/etc/docker/daemon.json文件:

{
    "bip": "172.44.0.1/16"
}

但是,当我创建网络时,Docker仍然将地址分配到受限范围。例如,我可以轻松地重现此行为,如下所示:

$ docker network create test_net
d7ce97965b53b3d3ea1cf0b4169d7851e115b95fe9bb506ebfa6df0964db8630
$ docker network inspect test_net
[
    {
        "Name": "test_net",
        "Id": "d7ce97965b53b3d3ea1cf0b4169d7851e115b95fe9bb506ebfa6df0964db8630",
        "Created": "2018-12-27T12:54:10.515011613-06:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.20.0.0/16",
                    "Gateway": "172.20.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

是否存在一种强制Docker始终生成我指定IP范围内的网络的方法?

1 个答案:

答案 0 :(得分:0)

解决方案是将此内容包含在我的撰写文件的顶部:

def nepotism
  tagstring = "array_position(ARRAY"+TAGS.keys.to_s.gsub(/\"/,"'")+", last_name)"
  @nepotism = Employee.order("last_name = 'Smith' desc, " + tagstring)
end

之所以可行,是因为Docker Compose总是为每个未指定的Compose应用程序生成一个默认网络。通过在每个应用程序中包含类似的内容,可以确保您的应用程序永不冲突,并始终使用您指定的IP范围。对于大型应用程序,您可能需要增加3个八位位组,而不是2个(/ 24与/ 16)。