docker 容器,将网络更改为默认bridge网络
在大型政体内部局域网,项目上线后发现部分网段无法访问,仔细排查是局域网网段与docker内网网段重叠,导致应用无法访问。
一般每个单位都会预留docker使用的内部网络地址,可能不尽相同,假设为10.255.0.0/16
如果是项目较小,也没有docker内部网络隔离的需求,直接这么干:
1、配置bip,配置成 10.255.0.1/16
vim /etc/docker/daemon.json
2、编辑docker-compose.yml,删除已有网络,添加 network_mode: bridge 使用默认的bridge网络,
如果不配置任何网络,docker默认会以docker-compose.yml所在文件夹名称_default为名自动创建一个网络,所以必须指定network_mode: bridge。
version: "3.2"
services:
ABC:
image: ABC/ABC:latest
container_name: ABC
ports:
- "8088:80"
restart: always
network_mode: bridge
3、销毁并重建容器
docker compose down && docker compose up -d
4、重启docker
systemctl daemon-reload
systemctl restart docker
6、删除没用的网络,如果删不掉,说明对应的网络还在使用,排查容器
docker network ls
docker network rm NETWORKID/NAME
如果无法删除,排查使用了具体网络的容器有哪些
docker network inspect 网络名称 -f '{{range .Containers}}{{.Name}} {{end}}'
7、查看容器的ip地址是否已经和bridge网络一致
docker inspect 容器名 | grep IPAddress
8、查看主机除了物理网卡的地址路由,是不是只剩下bridge网段的路由
ip route show
使用 network_mode: bridge 配置有个不好的地方,和networks不能同时配置。
可以将已有ip段拆分为多个IP段,分别配置bip和自定义网络。
还有,如果已有网络、容器是无法修改ip的,只能删除重建,如果已经有容器,特别是用户创建的容器,需要谨慎。