找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 261|回复: 0

Docker compose 踩坑 - network

[复制链接]

27

主题

11

回帖

151

积分

管理员

积分
151
发表于 2024-4-10 16:33:19 | 显示全部楼层 |阅读模式
此前使用 docker-compose.yaml 的时候,都没有自己配置 network,最近在部署新的 docker-compose 的时候报了 network overlap 的问题,才知道我的 network 子网不够用了。


问题是这样的,当你的 docker-compose.yaml 未指定 network 的时候,它会自动为你创建一个文件夹名_default 的网络,网络 CIDR 是 172.x.0.0/16。

每次我创建一个未配置 network 的 docker-compose 的时候都会创建一个,于是我的宿主机上就有了一堆这种子网。
  • 172.0.0.0/16
  • 172.1.0.0/16
  • 172.2.0.0/16
  • ...

这样很快就消耗了可用的 CIDR 网段。而且 /16 这样的 CIDR 太大了,可以容纳 65536 个虚拟机,或者说 docker instance。


解决问题的方法也很简单,自己定义网络的 CIDR 确保分配的网段大小不过大,这样就肯定不会有问题。

例如:
  1. version: "3"
  2. services:
  3.   navidrome:
  4.     image: deluan/navidrome:latest
  5.     container_name: navidrome
  6.     user: 1000:1000 # should be owner of volumes
  7.     ports:
  8.       - "4533:4533"
  9.     restart: unless-stopped
  10.     environment:
  11.       ND_SCANSCHEDULE: 1h
  12.       ND_LOGLEVEL: trace
  13.       ND_SESSIONTIMEOUT: 24h
  14.       ND_BASEURL: ""
  15.     networks:
  16.       - navidrome
  17. networks:
  18.   navidrome:
  19.     ipam:
  20.       driver: default
  21.       config:
  22.         - subnet: 172.26.0.40/29
  23.           ip_range: 172.26.0.40/29
  24.           gateway: 172.26.0.41
复制代码
上面的代码指定了 subnet 范围是 172.26.0.40/29,可用地址范围 172.26.0.41 - 172.26.0.46,8 个,足够绝大多数 docker-compose.yaml 使用了。

这样可以极大的节约 subnet 地址空间,延缓甚至可以说杜绝地址用尽的到来。毕竟想用完这么多的地址所需要的虚拟机,我们的内存恐怕根本 hold 不住。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|编程客 ( 鄂ICP备19023849号-1 )

GMT+8, 2025-6-12 06:08 , Processed in 0.217559 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表