docker network create
| 描述 | 创建网络 |
|---|---|
| 用法 | docker network create [OPTIONS] NETWORK |
描述
创建一个新网络。DRIVER 接受 bridge 或 overlay,它们是内置的网络驱动程序。如果您安装了第三方或您自己的自定义网络驱动程序,您也可以在此处指定 DRIVER。如果您不指定 --driver 选项,该命令会自动为您创建一个 bridge 网络。
当您安装 Docker Engine 时,它会自动创建一个 bridge 网络。此网络对应于 Docker Engine 传统上所依赖的 docker0 网桥。当您使用 docker run 启动新容器时,它会自动连接到此网桥网络。您无法移除此默认网桥网络,但可以使用 network create 命令创建新的网络。
$ docker network create -d bridge my-bridge-network
Bridge networks are isolated networks on a single Docker Engine installation. If you
want to create a network that spans multiple Docker hosts each running Docker
Engine, you must enable Swarm mode, and create an overlay network. To read more
about overlay networks with Swarm mode, see
"use overlay networks".
启用 swarm 模式后,您可以创建一个 swarm 范围的 overlay 网络:
$ docker network create --scope=swarm --attachable -d overlay my-multihost-network
默认情况下,swarm 范围的网络不允许附加手动启动的容器。此限制是为了防止有权访问 swarm 集群中非管理节点的用户运行能够访问 swarm 服务网络堆栈的容器。
上例中使用的 --attachable 选项禁用了此限制,并允许 swarm 服务和手动启动的容器都连接到 overlay 网络。
网络名称必须是唯一的。Docker 守护进程会尝试识别命名冲突,但这并不能保证。用户有责任避免名称冲突。
覆盖网络限制
在使用默认的基于 VIP 的端点模式创建网络时,您应该创建具有 /24 个块(默认值)的覆盖网络,这会将您限制为 256 个 IP 地址。此建议旨在解决 群集模式的限制。如果您需要超过 256 个 IP 地址,请不要增加 IP 块大小。您可以使用带有外部负载均衡器的 dnsrr 端点模式,或者使用多个较小的覆盖网络。有关不同端点模式的更多信息,请参阅 配置服务发现。
选项
| 选项 | 默认 | 描述 |
|---|---|---|
--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 子网掩码,以遵守单个覆盖网络中 IP 数量不超过 256 个的当前指南。每个子网都有 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)有可以传递的附加选项。以下是这些选项以及 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