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的,只能删除重建,如果已经有容器,特别是用户创建的容器,需要谨慎。

posted @ 2024-08-06 15:31  河在谈  阅读(502)  评论(0编辑  收藏  举报