docker network create
說明 | 建立網路 |
---|---|
用法 | docker network create [選項] 網路 |
說明
建立新的網路。DRIVER
接受 bridge
或 overlay
,它們是內建的網路驅動程式。如果您已安裝協力廠商或您自訂的網路驅動程式,您也可以在此處指定該 DRIVER
。如果您未指定 --driver
選項,則此命令會自動為您建立 bridge
網路。安裝 Docker 引擎時,它會自動建立 bridge
網路。此網路對應於 Docker 引擎傳統上依賴的 docker0
橋接器。使用 docker run
啟動新的容器時,它會自動連線到此橋接器網路。您無法移除此預設橋接器網路,但您可以使用 network create
命令建立新的橋接器網路。
$ docker network create -d bridge my-bridge-network
橋接器網路是單一 Docker 引擎安裝上的隔離網路。如果您想要建立跨越多個執行 Docker 引擎的 Docker 主機的網路,則必須啟用 Swarm 模式,並建立 overlay
網路。要深入了解 Swarm 模式的覆蓋網路,請參閱 "使用覆蓋網路"。
啟用 Swarm 模式後,您可以建立 Swarm 範圍的覆蓋網路
$ docker network create --scope=swarm --attachable -d overlay my-multihost-network
預設情況下,Swarm 範圍的網路不允許手動啟動的容器附加。新增此限制是為了防止可以存取 Swarm 叢集中非管理節點的人員執行能夠存取 Swarm 服務網路堆疊的容器。
上面範例中使用的 --attachable
選項會停用此限制,並允許 Swarm 服務和手動啟動的容器附加到覆蓋網路。
網路名稱必須是唯一的。Docker Daemon 會嘗試識別命名衝突,但這無法保證。避免名稱衝突是使用者的責任。
覆蓋網路限制
當您使用基於 VIP 的 endpoint 模式建立網路時,您應該使用 `/24` 區塊(預設值)建立覆蓋網路,這會將您限制為 256 個 IP 位址。此建議解決了 swarm 模式的限制。如果您需要超過 256 個 IP 位址,請勿增加 IP 區塊大小。您可以使用具有外部負載平衡器的 `dnsrr` endpoint 模式,或使用多個較小的覆蓋網路。有關不同 endpoint 模式的更多資訊,請參閱 設定服務探索。
選項
選項 | 預設值 | 說明 |
---|---|---|
--attachable | API 1.25+ 啟用手動容器附加 | |
--aux-address | 網路驅動程式使用的輔助 IPv4 或 IPv6 位址 | |
--config-from | API 1.30+ 要複製設定的網路 | |
--config-only | API 1.30+ 建立僅限設定的網路 | |
-d, --driver | bridge | 用於管理網路的驅動程式 |
--gateway | 主要子網路的 IPv4 或 IPv6 閘道器 | |
--ingress | API 1.29+ 建立 swarm 路由網格網路 | |
--internal | 限制對網路的外部存取 | |
--ip-range | 從子範圍分配容器 IP | |
--ipam-driver | IP 位址管理驅動程式 | |
--ipam-opt | 設定 IPAM 驅動程式特定選項 | |
--ipv6 | 啟用或停用 IPv6 網路 | |
--label | 在網路上設定中繼資料 | |
-o, --opt | 設定驅動程式特定選項 | |
--scope | API 1.30+ 控制網路的範圍 | |
--subnet | CIDR 格式的子網路,表示網路區段 |
範例
連接容器
啟動容器時,使用 `--network` 旗標將其連接到網路。此範例將 `busybox` 容器新增到 `mynet` 網路
$ docker run -itd --network=mynet busybox
如果您想在容器已在執行後將其新增到網路,請使用 `docker network connect` 子命令。
您可以將多個容器連接到同一個網路。連接後,容器只能使用另一個容器的 IP 位址或名稱進行通訊。對於支援多主機連線的 `overlay` 網路或自訂插件,連接到同一個多主機網路但從不同守護程式啟動的容器也可以透過這種方式進行通訊。
您可以使用 `docker network disconnect` 命令將容器與網路斷開連接。
指定進階選項
當您建立網路時,Docker Engine 預設會為該網路建立一個不重疊的子網路。此子網路不是現有網路的子分割。它純粹用於 IP 位址用途。您可以覆蓋此預設值,並使用 `--subnet` 選項直接指定子網路值。在 `bridge` 網路上,您只能建立一個子網路
$ docker network create --driver=bridge --subnet=192.168.0.0/16 br0
此外,您還可以指定 `--gateway`、`--ip-range` 和 `--aux-address` 選項。
$ docker network create \
--driver=bridge \
--subnet=172.28.0.0/16 \
--ip-range=172.28.5.0/24 \
--gateway=172.28.5.254 \
br0
如果您省略 `--gateway` 旗標,Docker Engine 會從慣用的池中為您選擇一個。對於 `overlay` 網路以及支援它的網路驅動程式插件,您可以建立多個子網路。此範例使用兩個 `/25` 子網路遮罩來遵循目前在單個覆蓋網路中不超過 256 個 IP 的指導原則。每個子網路都有 126 個可用位址。
$ docker network create -d overlay \
--subnet=192.168.10.0/25 \
--subnet=192.168.20.0/25 \
--gateway=192.168.10.100 \
--gateway=192.168.20.100 \
--aux-address="my-router=192.168.10.5" --aux-address="my-switch=192.168.10.6" \
--aux-address="my-printer=192.168.20.5" --aux-address="my-nas=192.168.20.6" \
my-multihost-network
請確保您的子網路不重疊。如果它們重疊,則網路建立將失敗,Docker Engine 將傳回錯誤。
Bridge 驅動程式選項
建立自訂網路時,預設網路驅動程式(即 `bridge`)具有可以傳遞的其他選項。以下是這些選項以及用於 docker0 橋接器的等效 Docker 守護程式旗標
選項 | 等效項 | 說明 |
---|---|---|
com.docker.network.bridge.name | - | 建立 Linux 橋接器時要使用的橋接器名稱 |
com.docker.network.bridge.enable_ip_masquerade | --ip-masq | 啟用 IP 偽裝 |
com.docker.network.bridge.enable_icc | --icc | 啟用或停用容器間連線 |
com.docker.network.bridge.host_binding_ipv4 | --ip | 繫結容器埠時的預設 IP |
com.docker.network.driver.mtu | --mtu | 設定容器網路 MTU |
com.docker.network.container_iface_prefix | - | 為容器介面設定自訂前綴 |
以下參數可以傳遞給任何網路驅動程式的 `docker network create`,同樣地,它們與用於 docker0 橋接器的 Docker 守護程式旗標大致等效
參數 | 等效項 | 說明 |
---|---|---|
--gateway | - | 主要子網路的 IPv4 或 IPv6 閘道器 |
--ip-range | --fixed-cidr | 從範圍分配 IP |
--internal | - | 限制對網路的外部存取 |
--ipv6 | --ipv6 | 啟用或停用 IPv6 網路 |
--subnet | --bip | 網路的子網路 |
例如,讓我們使用 `-o` 或 `--opt` 選項在發佈埠時指定 IP 位址繫結
$ docker network create \
-o "com.docker.network.bridge.host_binding_ipv4"="172.19.0.1" \
simple-network
網路內部模式 (--internal)
內部網路上的容器可以彼此通訊,但不能與任何其他網路通訊,因為未設定預設路由,且防火牆規則設定為捨棄往返其他網路的所有流量。可以與閘道器 IP 位址(以及因此適當設定的主機服務)進行通訊,並且主機可以直接與任何容器 IP 進行通訊。
預設情況下,當您將容器連接到 `overlay` 網路時,Docker 也會將橋接器網路連接到它以提供外部連線。如果您要建立外部隔離的 `overlay` 網路,您可以指定 `--internal` 選項。
網路入口模式 (--ingress)
您可以建立將用於在 swarm 叢集中提供路由網格的網路。您可以在建立網路時指定 `--ingress` 來執行此操作。一次只能建立一個入口網路。只有在沒有服務依賴網路的情況下才能移除網路。建立覆蓋網路時可用的任何選項在建立入口網路時也可用,除了 `--attachable` 選項之外。
$ docker network create -d overlay \
--subnet=10.11.0.0/16 \
--ingress \
--opt com.docker.network.driver.mtu=9216 \
--opt encrypted=true \
my-ingress-network
在預定義的網路上執行服務
您可以在預定義的 Docker 網路 `bridge` 和 `host` 上建立服務。
$ docker service create --name my-service \
--network host \
--replicas 2 \
busybox top
具有本地範圍驅動程式的 Swarm 網路
您可以使用本地範圍網路驅動程式建立 swarm 網路。您可以在建立網路期間將網路範圍提升至 `swarm` 來執行此操作。然後,您將能夠在建立服務時使用此網路。
$ docker network create -d bridge \
--scope swarm \
--attachable \
swarm-network
對於提供跨主機連線的網路驅動程式(例如 macvlan),如果需要特定於節點的設定才能在每個主機上佈建網路,您將透過僅限設定的網路提供該設定。當您建立 swarm 範圍的網路時,您將指定包含設定的網路的名稱。
node1$ docker network create --config-only --subnet 192.168.100.0/24 --gateway 192.168.100.115 mv-config
node2$ docker network create --config-only --subnet 192.168.200.0/24 --gateway 192.168.200.202 mv-config
node1$ docker network create -d macvlan --scope swarm --config-from mv-config --attachable swarm-network