swarm scope的Docker网桥网络不接受子网和驱动程序选项
我想控制哪个外部IP用于从我的swarm容器发送流量,这可以很容易地与swarm scope的Docker网桥网络不接受子网和驱动程序选项,docker,docker-swarm,iptables,docker-networking,Docker,Docker Swarm,Iptables,Docker Networking,我想控制哪个外部IP用于从我的swarm容器发送流量,这可以很容易地与桥接网络和iptables规则一起使用 这适用于本地范围的网桥网络: docker network create --driver=bridge --scope=local --subnet=172.123.0.0/16 -o "com.docker.network.bridge.enable_ip_masquerade"="false" -o "com.docker.netw
桥接网络
和iptables
规则一起使用
这适用于本地范围的网桥网络:
docker network create --driver=bridge --scope=local --subnet=172.123.0.0/16 -o "com.docker.network.bridge.enable_ip_masquerade"="false" -o "com.docker.network.bridge.name"="my_local_bridge" my_local_bridge
在iptables
上:
sudo iptables -t nat -A POSTROUTING -s 172.123.0.0/16 ! -o my_local_bridge -j SNAT --to-source <my_external_ip>
但如果我尝试将swarm容器连接到此网络,则会出现以下错误:
网络“my_local_bridge”声明为外部,但它不在正确的范围内:“local”而不是“swarm”
好的,太好了,让我们切换范围到swarm,对吗?错了,错了
创建网络:
docker network create --driver=bridge --scope=swarm --subnet=172.123.0.0/16 -o "com.docker.network.bridge.enable_ip_masquerade"="false" -o "com.docker.network.bridge.name"="my_swarm_bridge" my_swarm_bridge
现在让我们检查一下docker网络检查我的swarm桥:
[
{
"Name": "my_local_bridge",
"Id": "...",
"Created": "...",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.123.0.0/16"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
...
},
"Options": {
"com.docker.network.bridge.enable_ip_masquerade": "false",
"com.docker.network.bridge.name": "my_local_bridge"
},
"Labels": {}
}
]
[
{
"Name": "my_swarm_bridge",
"Id": "...",
"Created": "...",
"Scope": "swarm",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.21.0.0/16",
"Gateway": "172.21.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
...
},
"Options": {},
"Labels": {}
}
]
我现在可以很好地将其连接到swarm容器,但是没有设置选项
,也没有定义子网
如何为“群集”范围的网桥网络设置这些选项?或者,如果无法将com.docker.network.bridge.enable\u IP\u masquerade
设置为false,如何将iptables设置为使用已定义的外部IP
我是否需要制作脚本来检查分配的子网并手动删除iptablesMASQUERADE
规则
谢谢大家我很确定你不能在swarm中使用桥接驱动程序,你应该使用overlay驱动程序。 来自Docker文档: 网桥网络适用于在同一Docker守护程序主机上运行的容器。对于在不同Docker守护程序主机上运行的容器之间的通信,您可以在操作系统级别管理路由,也可以使用覆盖网络
我可能不理解您的特定用例…您可以在群中使用“本地”网络,请检查:实现:很高兴知道,谢谢!您是否尝试过将conf放在ConfigOnly网络中,然后使用config from?看起来可能合适。