自建容器服务

自建容器服务

docker

实际更换到docker compose后可以向后兼容docker,且方便调整配置。目前个人使用已经完全换用docker compose。

使用时新增docker-compose.yml文件即可,必要时可增加.env文件。

Docker 基本配置

为方便docker国内使用,对docker做一些基本配置。

示例配置:/etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me"
  ],
  "default-address-pools" : [
    {
      "base": "172.21.0.0/14",
      "size": 27
    },
    {
      "base": "172.25.0.0/13",
      "size": 27
    }
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "20m",
    "max-file": "3"
  },
  "ipv6": true,
  "fixed-cidr-v6": "fd00:dead:beef:c0::/80",
  "experimental": true,
  "ip6tables": true
}
参数 解释 备注
registry-mirrors Docker 镜像加速代理地址
default-address-pools 配置容器可以使用的 IP 地址池,定义compose默认划分使用的子网掩码 默认情况下,compose使用16位掩码划分地址,快速消耗私网地址。(先后消耗完B类、C类私网地址)
当与内网地址冲突时,直接会引发路由混乱(Docker底层使用iptables)。出现网络出错,容器无法使用的现象!
多compose时务必配置该参数!
log-driver Docker 日志驱动程序 json-file 使用 JSON 格式的文件存储日志
log-opts.max-size 单个日志文件的最大大小 超过该大小则进行轮转
log-opts.max-file 保留的日志文件数量 超过该数量则删除最旧的日志
ipv6 是否启用 IPv6 支持。
fixed-cidr-v6 Docker IPv6 子网的固定 CIDR,定义容器使用的 IPv6 地址范围。 启用IPv6后,根据实际情况配置
experimental 是否启用 Docker 实验性特性。 根据需求谨慎启用,会涉及到重要特性功能
ip6tables 是否使用 ip6tables 进行 IPv6 的防火墙配置。 若启用IPv6,建议开启

Docker网络逻辑

该部分默认已有基本的IPv4知识(CIDR)。

🚨 注意:Docker 根据部署需求将占用私网网段直至耗尽,无论该网段是否被用于外部网络通信,这极可能造成潜在的网络路由故障

Docker 网络默认地址池

本地网络(dockerd --default-address-pool)及 Swarm 全局网络的默认配置如下:

类型
(Type)
默认地址池
(Default Pool)
默认子网大小
(Default Size)
地址范围 可分配的子网个数
global
(Swarm)
10.0.0.0/8 /24 10.0.0.0 - 10.255.255.255 65536
local 172.17.0.0/12 /16 172.16.0.0 - 172.31.255.255 16
local* 192.168.0.0/16 /20 192.168.0.0 - 192.168.255.255 16

🚨注意: local网络首先从 172.17.0.0/12 中分配,一旦 172.17.0.0/12 被用尽,则会从 192.168.0.0/16 中分配。

Docker 网络默认bridge网络

使用Docker默认配置时,docker-compose仅能创建31个自定义bridge网络。

Docker Compose 31个默认 IPv4 网段分配
{
  "default-address-pools": [
  // 阶段一:从 172.17.0.0/12 池分配的 15 个 /16 子网
  {
    "base": "172.18.0.0/16",
    "size": 16
  },                              <-- docker0 (已预留)
  {
    "base": "172.19.0.0/16",
    "size": 16
  },                              <-- docker_gwbridge (南北向流量,建议预留)
  {
    "base": "172.20.0.0/16",
    "size": 16
  },                              <-- ucp-bridge ( MKE(Mesos Kubernetes Executor) 组件容器,建议预留)
  {
    "base": "172.21.0.0/16",
    "size": 16
  },
  {
    "base": "172.22.0.0/16",
    "size": 16
  },
  {
    "base": "172.23.0.0/16",
    "size": 16
  },
  {
    "base": "172.24.0.0/16",
    "size": 16
  },
  {
    "base": "172.25.0.0/16",
    "size": 16
  },
  {
    "base": "172.26.0.0/16",
    "size": 16
  },
  {
    "base": "172.27.0.0/16",
    "size": 16
  },
  {
    "base": "172.28.0.0/16",
    "size": 16
  },
  {
    "base": "172.29.0.0/16",
    "size": 16
  },
  {
    "base": "172.30.0.0/16",
    "size": 16
  },
  {
    "base": "172.31.0.0/16",
    "size": 16
  },
  {
    "base": "172.32.0.0/16",
    "size": 16
  },
  // 阶段二:从 192.168.0.0/16 池分配的 16 个 /20 子网
  {
    "base": "192.168.0.0/20",
    "size": 20
  },
  {
    "base": "192.168.16.0/20",
    "size": 20
  },
  {
    "base": "192.168.32.0/20",
    "size": 20
  },
  {
    "base": "192.168.48.0/20",
    "size": 20
  },
  {
    "base": "192.168.64.0/20",
    "size": 20
  },
  {
    "base": "192.168.80.0/20",
    "size": 20
  },
  {
    "base": "192.168.96.0/20",
    "size": 20
  },
  {
    "base": "192.168.112.0/20",
    "size": 20
  },
  {
    "base": "192.168.128.0/20",
    "size": 20
  },
  {
    "base": "192.168.144.0/20",
    "size": 20
  },
  {
    "base": "192.168.160.0/20",
    "size": 20
  },
  {
    "base": "192.168.176.0/20",
    "size": 20
  },
  {
    "base": "192.168.192.0/20",
    "size": 20
  },
  {
    "base": "192.168.208.0/20",
    "size": 20
  },
  {
    "base": "192.168.224.0/20",
    "size": 20
  },
  {
    "base": "192.168.240.0/20",
    "size": 20
  }
]
}

当创建第 32bridge网络时,将报错:

ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network 

调整default-address-pools配置项可解决问题。

参考:The definitive guide to docker’s default-address-pools option

拓展:Docker Compose 网络实践

容器手册


自建容器服务
http://blog.zhens.site/docker-selfhost/
作者
zhens
发布于
2025年6月22日
许可协议