gpt4 book ai didi

具有 swarm 作用域的 Docker 桥接网络不接受子网和驱动程序选项

转载 作者:行者123 更新时间:2023-12-05 06:04:15 24 4
gpt4 key购买 nike

我想控制哪个外部 IP 用于从我的 swarm 容器发送流量,这可以很容易地与 bridge networkiptables 规则一起使用。

这适用于本地范围的桥接网络:

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>

这是 docker network inspect my_local_bridge 的输出:

[
{
"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": {}
}
]

但是如果我尝试将 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 network inspect my_swarm_bridge:

[
{
"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 容器,但是 options 都没有设置,subnet 也不是我定义的......

如何为“群”范围的桥接网络设置这些选项?或者,如果我不能将 com.docker.network.bridge.enable_ip_masquerade 设置为 false,我如何设置 iptables 以使用定义的外部 IP?

我是否需要编写脚本来检查分配的子网并手动删除 iptables MASQUERADE 规则?

谢谢大家

最佳答案

我很确定你不能在 swarm 中使用桥接驱动程序,你应该使用覆盖驱动程序。来自 Docker 文档:

Bridge networks apply to containers running on the same Docker daemon host. For communication among containers running on different Docker daemon hosts, you can either manage routing at the OS level, or you can use an overlay network.

虽然我可能不理解您的特定用例...

关于具有 swarm 作用域的 Docker 桥接网络不接受子网和驱动程序选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66399756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com