讓docker 每次建立docker compose 不要使用172.x.x.x來建立 虛擬網路給 containers使用

要讓 Docker Compose 每次建立網路時避免使用 172.x.x.x 這類網段,有兩種常見做法:


🛠️ 方法一:在 docker-compose.yml 中明確指定網路子網段

你可以在 Compose 檔案裡定義自訂網路,指定 subnet,這樣就不會用到預設的 172.x.x.x

version: "3.9"
services:
  web:
    image: nginx
    networks:
      - mynet
networks:
  mynet:
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.200.0/24
          gateway: 192.168.200.1
  • subnet → 指定容器使用的網段,例如 192.168.200.0/24
  • gateway → 指定網路的 gateway IP
    這樣每次 docker compose up 都會建立在你指定的網段,而不是隨機挑選 172.x.x.x

🛠️ 方法二:修改 Docker Daemon 預設網段

如果你希望 所有 Docker 預設網路(包含 Compose 自動建立的)都不要用 172.x.x.x,可以在 /etc/docker/daemon.json 設定:

{
  "default-address-pools": [
    {
      "base": "192.168.240.0/20",
      "size": 24
    }
  ]
}
  • default-address-pools → 定義 Docker 建立新網路時的預設地址池
  • base → 起始網段
  • size → 每個網路的子網大小
    修改後重啟 Docker:
sudo systemctl restart docker

這樣 Docker 在建立新網路(包含 Compose 自動建立的 bridge)時,就會從 192.168.240.0/20 裡分配,而不是用 172.x.x.x


⚠️ 注意事項

  • 建議挑選 不會跟外部網路衝突的 RFC1918 私有網段
    • 10.0.0.0/8
    • 192.168.0.0/16
  • 如果你有多個 Compose 專案,最好在 docker-compose.yml 裡明確指定網段,避免不同專案互相重疊。
  • 修改 daemon 設定後,舊網路不會自動改,需要重新建立。

好問題 👍。當你在 Docker Daemon/etc/docker/daemon.json 裡設定 default-address-pools 之後,Docker 在建立新的網路(包含 Docker Compose 自動建立的 bridge 網路)時,就會從你指定的範圍去分配子網段,而不是用預設的 172.x.x.x


🛠️ 設定範例

假設你在 /etc/docker/daemon.json 裡加上:

{
  "default-address-pools": [
    {
      "base": "192.168.240.0/20",
      "size": 24
    }
  ]
}
  • base → 起始網段是 192.168.240.0/20,這個範圍涵蓋 192.168.240.0192.168.255.255
  • size → 每個新網路分配一個 /24 子網段。

📋 分配結果舉例

當你執行不同的 Docker Compose 專案時,Docker 會依序分配:

  • 第一個專案 → 192.168.240.0/24,gateway 192.168.240.1
  • 第二個專案 → 192.168.241.0/24,gateway 192.168.241.1
  • 第三個專案 → 192.168.242.0/24,gateway 192.168.242.1
  • …依序往上分配,直到 192.168.255.0/24
    這樣每個 Compose 專案的網段都會落在 192.168.240.0/20 這個範圍內,不會再用到 172.x.x.x

⚠️ 注意事項

  • 如果你設定 size: 24,每個新網路就是一個 /24,最多可以分配 16 個網路(因為 /20 裡有 16 個 /24)。
  • 如果你需要更多網路,可以把 size 設大一點,例如 /16,但要小心避免跟外部網段衝突。
  • 修改後需要重啟 Docker,舊網路不會自動改,要重新建立才會套用新範圍。


🛠️ 設定範例

假設你在 /etc/docker/daemon.json 裡加上:

{
  "default-address-pools": [
    {
      "base": "192.168.240.0/20",
      "size": 24
    }
  ]
}
  • base → 起始網段是 192.168.240.0/20,這個範圍涵蓋 192.168.240.0192.168.255.255
  • size → 每個新網路分配一個 /24 子網段。

📋 分配結果舉例

當你執行不同的 Docker Compose 專案時,Docker 會依序分配:

  • 第一個專案 → 192.168.240.0/24,gateway 192.168.240.1
  • 第二個專案 → 192.168.241.0/24,gateway 192.168.241.1
  • 第三個專案 → 192.168.242.0/24,gateway 192.168.242.1
  • …依序往上分配,直到 192.168.255.0/24
    這樣每個 Compose 專案的網段都會落在 192.168.240.0/20 這個範圍內,不會再用到 172.x.x.x

⚠️ 注意事項

  • 如果你設定 size: 24,每個新網路就是一個 /24,最多可以分配 16 個網路(因為 /20 裡有 16 個 /24)。
  • 如果你需要更多網路,可以把 size 設大一點,例如 /16,但要小心避免跟外部網段衝突。
  • 修改後需要重啟 Docker,舊網路不會自動改,要重新建立才會套用新範圍。

Also See

File12FileLast Modified
要把 Docker 版本從 29 降到 28,同時保留原本的容器不受影響要把 Docker 版本從 29 降到 28,同時保留原本的容器不受影響1:23 AM - December 07, 2025
要建立並在背景執行一個 Docker Compose要建立並在背景執行一個 Docker Compose1:23 AM - December 07, 2025
完整移除一個 Docker container完整移除一個 Docker container1:23 AM - December 07, 2025
完整停止一個 Docker Compose完整停止一個 Docker Compose1:23 AM - December 07, 2025
停止一個正在執行的 Docker container停止一個正在執行的 Docker container1:23 AM - December 07, 2025
Windows containersWindows containers1:23 AM - December 07, 2025
portainer container unreachable問題portainer container unreachable問題1:23 AM - December 07, 2025
docker列出 所有容器的網域 (network) 與 IP 位址docker列出 所有容器的網域 (network) 與 IP 位址1:23 AM - December 07, 2025
Docker 容器管理速查表Docker 容器管理速查表1:23 AM - December 07, 2025
Docker 容器的 虛擬 IP 固定Docker 容器的 虛擬 IP 固定1:23 AM - December 07, 2025
docker 列出目前沒有被用的虛擬網路和網域IPdocker 列出目前沒有被用的虛擬網路和網域IP1:23 AM - December 07, 2025
避免 Docker 自動使用 172.x.x.x 這類網段來建立虛擬網路避免 Docker 自動使用 172.x.x.x 這類網段來建立虛擬網路8:20 PM - December 06, 2025