最新解决办法----Docker默认网段与主机网段冲突

一、docker默认网卡docker0默认的网段为172.17.0.0/16

某些企业下可能规划私网地址与docker0默认网段冲突,就会导致请求主机发送数据包,流量转发不出去,导致网络访问出现异常。

1、现实情况企业网络一般不会重新规划,只能将docker0分配的默认网段修改。

修改/etc/docker/daemon.json (如果没有此配置文件的话,新建一个即可)

{

"default-address-pools":

[

{"base":"172.100.0.0/16","size":24}

]

}

这里的172.100.0.0/16为你要修改的新的网段,只要不与请求主机网段冲突即可。

配置文件格式一定要对,否则重启docker会出现问题。

这里我分享一个daemon.json的配置文件,防止大家因为格式问题出现错误

https://www.alipan.com/s/Fu45FgzvfGm 提取码: 0c9k

直接将下载的配置文件,通过ftp上传到服务器上即可。

2、删除docker0

ip link delete docker0

3、重新启动docker

service stop docker(systemctl stop docker)
service start docker(systemctl start docker)

4、查看docker现有的ip网段

此时查看,已经修改完。

二、 如果用 docker-compose启动,并且 docker-compose.yml有指定network,在启动过程同样会建立172.17.0.0类似的网络地址,可能还是会与主机冲突,这时候我们使用以下方法修改默认的网段。

1、我们查看当前有docker建立的网络名称

docker network list

从上面可以看出docker建立了3个虚拟网卡,分别为app_app_network、app-default、bridge,其中 app_app_network、app-default是docker-compose启动后建立的,我们只需要修改这2个网络分配的网络地址即可

2、停止并删除现有的docker容器

docker stop $(docker ps -aq)
docker rm $(docker ps -aq)

3、删除上面的app_app_network、app-default

docker network remove app_default
docker network remove app_app_network

4、为上面虚拟网卡重新指定网段

docker network create --driver=bridge --subnet  172.150.0.0/24 app_default
docker network create --driver=bridge --subnet  172.160.0.0/24 app_app-network

5、查看现有的网卡地址

ifconfig

从网卡信息上来看,这里的docker网卡也已经改过来了。

希望可以解决朋友们的问题,这个出现的次数还是很多的。

### 解决 Docker 容器网络宿主机或其他网络设备之间的网段路由冲突 当遇到 Docker 容器网络宿主机或其他网络设备间的网段路由冲突时,可以采取多种策略来解决这一问题。 #### 使用不同的子网范围 一种方法是调整 Docker默认子网设置,确保其不会其他现有网络发生重叠。可以通过修改 `/etc/docker/daemon.json` 文件中的 `bip` 参数指定一个新的子网地址[^1]: ```json { "bip": "192.168.1.1/24" } ``` 重启 Docker 服务使更改生效后,新启动的容器将会使用此自定义子网。 #### 利用 Host 模式的 Network Mode 对于某些特定场景下的应用部署需求,可以直接采用 `host` 网络模式,这使得容器共享宿主机的网络命名空间,从而避免了 IP 地址分配带来的潜在冲突风险。需要注意的是,在这种情况下不再支持端口映射功能[^3]: ```bash docker run -d --network host --name myapp myimage ``` #### 配置静态IP地址给容器 如果希望更精确地控制每个容器所获得的具体 IP 地址,则可以在创建容器时为其指派固定的 IPv4 或者 IPv6 地址: ```bash docker network create --subnet=172.20.0.0/16 custom_network docker run -it --rm \ --net=custom_network \ --ip=172.20.10.10 \ alpine sh ``` 上述命令会先建立一个名为 `custom_network` 的用户定义桥接网络,并设定相应的子网;接着再运行一个带有固定 IP (`172.20.10.10`) 的 Alpine Linux 容器实例。 #### 实施跨主机通信方案 针对涉及多个物理服务器上运行的应用程序架构而言,考虑引入专门设计用于处理此类复杂环境的技术栈可能是必要的选择之一。例如利用原生提供的 Overlay MacVLAN 插件或是第三方工具如 Flannel、Weave 及 Calico 来构建覆盖型虚拟局域网(VXLAN),进而实现安全可靠的多节点互联能力[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值