gpt4 book ai didi

docker - 为什么我必须定期使用 `docker network prune` 来重新启用容器内的 docker 映射 ip 连接?

转载 作者:行者123 更新时间:2023-12-02 18:28:09 24 4
gpt4 key购买 nike

我大部分时间都使用 vpn 工作,并且我注意到有时外部网络连接会失败,例如从远程位置安装到容器中会被拒绝连接。 docker network prune允许 docker 重新映射连接,然后我可以继续我正在做的任何事情,但这里到底发生了什么?使用 docker for mac,如果它是相关的。

最佳答案

一个 docker network prune删除任何未使用的网络,然后使用类似 docker-compose 的内容重新部署项目或 docker stack deploy将重新创建网络。当 docker 创建一个网络时,它会从一个私有(private) IP 池中挑选并排除它当前可以路由到的任何网络。最后一部分是当您连接和断开 VPN 时发生的变化,或者在 docker 可见的不同网络的不同位置工作时发生的变化。

我怀疑你看到的是网络冲突。当 docker 选择您后来发现自己连接到的同一网络子网时(例如,在新位置打开 VPN 或 wifi)尝试从 docker 容器连接到该外部网络时,会被路由到 docker 网络而不是外部网络。这会导致您的连接失败。

您可以告诉 docker 仅从您选择的子网池中选择网络。您将需要识别您的 VPN、家庭、办公室、咖啡店等使用的子网,然后为 docker 选择任何这些子网之外的私有(private) IP 范围。此配置位于桥接网络的 daemon.json 文件中(在 Mac 上,您转到 docker 图标,打开设置/首选项,转到守护程序,然后进入高级)如下所示:

{
"bip": "10.15.0.1/24",
"default-address-pools": [
{"base": "10.20.0.0/16", "size": 24},
{"base": "10.40.0.0/16", "size": 24}
]
}

“bip”设置用于网桥 IP,即 docker0 或名为 bridge 的网桥网络。 bip 地址必须有效,所以不要以 0 或 255 结尾,它将用于网关,掩码 ( /24) 将用于指定子网大小。

“default-address-pools”选项出现在 18.06 中,并指定用于 docker 创建的其他桥接网络的子网,包括 docker network create桥梁和由 docker-compose 创建的任何桥梁.

对于 swarm 模式,从 18.09 开始,您可以在首次创建 swarm 时定义用于覆盖网络的池:
$ docker swarm init \
--default-addr-pool 10.20.0.0/16 \
--default-addr-pool 10.40.0.0/16 \
--default-addr-pool-mask-length 24

如果您需要更改这些,您需要删除并重新创建集群。

要查看当前使用的网络,您可以运行 ip r查看所有路线。第一列以 CIDR 表示法显示每个子网和掩码。上面的 docker 命令使用的符号相同。

关于docker - 为什么我必须定期使用 `docker network prune` 来重新启用容器内的 docker 映射 ip 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55819578/

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