透過 Docker compose 為容器設定靜態 IP

我正在嘗試在我的 Unifi 容器上設置靜態 IP,但網路好像都找不到這個容器。這是我在 docker compose 裡的網路設定:

services:
unifi-os-server:
image: Package unifi-os-server · GitHub
networks:
unifi_network:
ipv4_address: 192.168.0.50
container_name: Unifi-OS-Server
cgroup: host
cap_add:
- NET_RAW
- NET_ADMIN
extra_hosts:
host.docker.internal: host-gateway
.
networks:
unifi_network:
name: Unifi OS Server
driver: bridge
ipam:
config:
- subnet: 192.168.0.0/24
gateway: 192.168.0.1

虛擬交換器建立如下:

Virtual Switch(虛擬交換器):
Container Network (br-656dddb1c5d3)
IP 位址:
192.168.0.1
實體:

虛擬:
Unifi-OS-Server_Virtual Adapter 1
成員:
Container Station

卡住了,不知道是 docker compose 設定有問題,還是虛擬交換器設錯?有沒有人能幫我看看?

你需要把 compose 使用預先格式化的文字區塊貼上,否則它不會正確發佈。

你有看過 qnet 手冊嗎?

感謝你提供那個連結。我把 qnet 用於 dhcp 和 static 的驅動遺失了。

折騰了好幾個小時後,我調整了網路設定,總算讓它運作起來了:

driver: macvlan
driver_opts:
parent: eth2

有點好奇,我應該改用 qnet static driver(qnet 靜態驅動)嗎?

嗨,@Hypnosis4u2nv 以下資訊來自我們的研發團隊。

是否選擇使用 qnetmacvlan,取決於您的需求。

macvlan 就足夠了,如果您的唯一目標是讓容器能夠以一個靜態區網 IP 從其他網路設備上存取。

但如果您還需要 QNAP 主機系統同一台 NAS 上的其他容器 能夠與該容器通訊,那麼 qnet 才是正確的選擇——因為 macvlan 有個已知限制,就是主機無法存取在 macvlan 介面上的容器。

如果需要透過 Container Station 介面部署 UniFi 容器的逐步教學,請參考以下常見問題: 如何在 QNAP NAS 上通過 Docker 部署 UniFi Network 應用程式? | QNAP

感謝你解釋這兩個驅動的差異。既然我只需要 Unifi OS Server 能夠和網路上的其他 Unifi 裝置(通知/adoption)通訊,而 QNAP 主機或容器本身不需要其他功能,我會繼續使用 macvlan 設定。

所以只要使用正確的 YAML,其實並不困難。下面是我用於 Uptime Kuma 容器的完整 YAML 檔案。請特別注意「Networks」區段……

services:
  uptime-kuma:
    image: louislam/uptime-kuma:2
    container_name: uptime-kuma
    restart: always
    ports:
      - "3001:3001"  # 這會將容器的 3001 埠對映到主機的 3001 埠
    volumes:
      - /share/Container/uptime-kuma:/app/data  # 設定持久化儲存空間
    environment:
      - TZ=America/Chicago  # 設定時區(請改為你偏好的時區,這樣監控時間才會一致)
      - UMASK=0022  # 手動設定檔案權限
    networks:
      kuma-network:
        ipv4_address: 192.168.1.23
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3001"]
      interval: 30s
      retries: 3
      start_period: 10s
      timeout: 5s
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

networks:
  kuma-network:
    driver_opts:
      iface: eth0
    driver: qnet
    ipam:
      driver: qnet
      options:
        iface: eth0
      config:
        - subnet: 192.168.0.0/23
          gateway: 192.168.1.1

這裡有點讓人困惑。

你用的是靜態 IP 192.168.1.23,但你定義的網路子網是 192.168.0.0/23?

我的子網路設定也是用 /24,而你設的是 /23。我不確定這對我使用 macvlan driver 的設定有什麼影響,但我看到 QNAP 文件中 qnet driver 確實有用到那個 /23 標註。

!92.168.0.0/23 的子網遮罩是 255.255.254.0。它可以使用從 192.168.0.1 到 192.168.1.254 的 IP。

沒有什麼「特別」的。就像 10.0.0.0/8 (255.0.0.0) 可以讓你使用從 10.0.0.1 到 10.255.255.254 的 IP 一樣。

我只是需要/想要一個更大的網路。

只要根據你的網路大小來設定就可以了。

感謝你的說明!