docker network create

说明创建网络
用法docker network create [OPTIONS] NETWORK

说明

创建一个新网络。DRIVER 接受内置网络驱动程序 bridgeoverlay。如果您安装了第三方或自己的自定义网络驱动程序,也可以在此处指定该 DRIVER。如果您未指定 --driver 选项,命令会自动为您创建一个 bridge 网络。当您安装 Docker Engine 时,它会自动创建一个 bridge 网络。此网络对应于 Docker Engine 传统上依赖的 docker0 bridge。当您使用 docker run 启动新容器时,它会自动连接到此 bridge 网络。您无法移除此默认 bridge 网络,但可以使用 network create 命令创建新网络。

$ docker network create -d bridge my-bridge-network

Bridge 网络是单个 Docker Engine 安装上的隔离网络。如果您想创建一个跨多个运行 Docker Engine 的 Docker 主机的网络,您必须启用 Swarm 模式,并创建一个 overlay 网络。要详细了解 Swarm 模式下的 overlay 网络,请参阅 "使用 overlay 网络"

启用 swarm 模式后,您可以创建 swarm 范围的 overlay 网络

$ docker network create --scope=swarm --attachable -d overlay my-multihost-network

默认情况下,swarm 范围的网络不允许手动启动的容器连接。添加此限制是为了防止访问 swarm 集群中非管理节点的人员运行能够访问 swarm 服务网络堆栈的容器。

上例中使用的 --attachable 选项会禁用此限制,并允许 swarm 服务和手动启动的容器都连接到 overlay 网络。

网络名称必须唯一。Docker daemon 会尝试识别命名冲突,但这无法保证。避免命名冲突是用户的责任。

Overlay 网络限制

使用默认的基于 VIP 的端点模式创建网络时,应使用 /24 块(默认值)创建 overlay 网络,这会将 IP 地址限制在 256 个以内。此建议旨在解决Swarm 模式下的限制。如果需要超过 256 个 IP 地址,请勿增加 IP 块大小。您可以使用外部负载均衡器搭配 dnsrr 端点模式,或使用多个较小的 overlay 网络。有关不同端点模式的更多信息,请参阅配置服务发现

选项

选项默认值说明
--attachableAPI 1.25+ 启用手动容器连接
--aux-address网络驱动程序使用的辅助 IPv4 或 IPv6 地址
--config-fromAPI 1.30+ 要从中复制配置的网络
--config-onlyAPI 1.30+ 仅创建配置网络
-d, --driverbridge用于管理网络的驱动程序
--gateway主子网的 IPv4 或 IPv6 网关
--ingressAPI 1.29+ 创建 swarm 路由网格网络
--internal限制对网络的外部访问
--ip-range从子范围分配容器 IP
--ipam-driverIP 地址管理驱动程序
--ipam-opt设置 IPAM 驱动程序特定选项
--ipv4true启用或禁用 IPv4 地址分配
--ipv6启用或禁用 IPv6 地址分配
--label设置网络的元数据
-o, --opt设置驱动程序特定选项
--scopeAPI 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 子网掩码,以遵循当前建议的在单个 overlay 网络中 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 驱动程序选项

创建自定义 bridge 网络时,可以传递以下附加选项。其中一些选项有等效的标志,可在 dockerd 命令行或 daemon.json 中用于配置默认的 bridge docker0

网络创建选项docker0 的守护进程选项说明
com.docker.network.bridge.name-创建 Linux bridge 时使用的 bridge 名称
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 bridge 的 Docker daemon 标志大致等效

网络创建选项docker0 的守护进程选项说明
--gateway-主子网的 IPv4 或 IPv6 网关
--ip-range--fixed-cidr, --fixed-cidr-v6从范围分配 IP 地址
--internal-限制对网络的外部访问
--ipv4-启用或禁用 IPv4 地址分配
--ipv6--ipv6启用或禁用 IPv6 地址分配
--subnet--bip, --bip6网络子网

例如,使用 -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 也会将其连接到 bridge 网络以提供外部连接。如果要创建外部隔离的 overlay 网络,可以指定 --internal 选项。

网络入口模式 (--ingress)

您可以创建用于在 swarm 集群中提供路由网格的网络。为此,在创建网络时指定 --ingress。一次只能创建一个入口网络。只有当没有服务依赖于该网络时,才能将其移除。除了 --attachable 选项之外,创建 overlay 网络时可用的任何选项在创建入口网络时也可用。

$ 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 网络 bridgehost 上创建服务。

$ 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