【发布时间】:2018-08-27 19:53:48
【问题描述】:
为避免冲突,我想为 docker0 网桥和所有由 docker 守护进程在启动新容器时动态创建的接口使用定义的子网范围。
在快速浏览 docker 文档后,我发现了有希望的 fixed-cidr 选项。我将此选项添加到我的 daemon.json 中。我的配置如下:
/etc/docker/daemon.json
{
"bip": "192.168.89.1/22",
"fixed-cidr": "192.168.89.2/24"
}
重启 docker 守护进程后,配置看起来很有希望:
docker inspect bridge
[
{
"Name": "bridge",
"Id": "365e0d373bcfc82bc73c623d680dcaee773e247f631e5b2324e3b63401bcf6fd",
"Created": "2018-03-19T09:59:22.20439309+01:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "192.168.89.1/22",
"IPRange": "192.168.89.0/24",
"Gateway": "192.168.89.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
但由于某种原因,当我创建一个新网络时:
docker network create test-network
它从默认 IP 范围获取一个新地址:
docker inspect test-network
[
{
"Name": "test-network",
"Id": "bf0f6baa8239c73a9524f8a77035bc2be18a67ad4d0d2ba4f73b3d175f5315b3",
"Created": "2018-03-19T10:31:24.450183553+01:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
目前,我有一个临时解决方案。我将在 docker-compose.yml 中简单地定义一个自定义子网
yaml
networks:
default:
ipam:
config:
- subnet: 192.168.89.2/24
但这会导致更多问题,因为由于网络冲突,无法在同一主机上多次启动项目。
有谁知道问题出在哪里?
编辑: 这似乎是 docker 中缺少的功能。 Github Issue
好在前几天这个功能已经提交到master分支了:Committed feature
【问题讨论】:
标签: docker networking ip