文章摘要(AI生成)
管理网络用法$ docker network COMMAND说明管理网络。您可以使用子命令来创建、检查、列出、删除、修剪、连接和断开网络。docker网络连接将容器连接到网络用法🔗$ docker network connect [OPTIONS] NETWORK CONTAINER有关此命令可用
用法
$ docker network COMMAND
说明
管理网络。您可以使用子命令来创建、检查、列出、删除、修剪、连接和断开网络。
docker网络连接
将容器连接到网络
用法🔗
$ docker network connect [OPTIONS] NETWORK CONTAINER
说明
将容器连接到网络。您可以按名称或 ID 连接容器。连接后,容器可以与同一网络中的其他容器通信。
有关此命令的示例用法,请参阅下面的示例部分。
选项
姓名,简写 | 默认 | 描述 |
---|---|---|
--alias |
为容器添加网络范围的别名 | |
--driver-opt |
网络驱动程序选项 | |
--ip |
IPv4 地址(例如,172.30.100.104 ) |
|
--ip6 |
IPv6 地址(例如,2001:db8::33 ) |
|
--link |
添加链接到另一个容器 | |
--link-local-ip |
为容器添加链接本地地址 | |
--help |
打印使用 |
例子
将正在运行的容器连接到网络
$ docker network connect multi-host-network container1
启动时将容器连接到网络
您还可以使用该docker run --network=<network-name>
选项启动容器并立即将其连接到网络。
$ docker run -itd --network=multi-host-network busybox
指定容器将在给定网络上使用的 IP 地址 (–ip)
您可以指定要分配给容器接口的 IP 地址。
$ docker network connect --ip 10.10.36.122 multi-host-network container2
使用旧--link
选项 (–link)
您可以使用--link
选项将另一个容器与首选别名链接
$ docker network connect --link container1:c1 multi-host-network container2
为容器创建网络别名 (–alias)
--alias
选项可用于通过连接到的网络中的另一个名称解析容器。
$ docker network connect --alias db --alias mysql multi-host-network container2
停止、暂停或重启容器的网络影响
您可以暂停、重新启动和停止连接到网络的容器。容器在运行时连接到其配置的网络。
如果指定,容器的 IP 地址将在停止的容器重新启动时重新应用。如果 IP 地址不再可用,容器将无法启动。保证 IP 地址可用的一种方法是--ip-range
在创建网络时指定一个地址,并从该范围之外选择静态 IP 地址。这可确保当此容器不在网络上时,不会将 IP 地址提供给另一个容器。
$ docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 multi-host-network
$ docker network connect --ip 172.20.128.2 multi-host-network container2
要验证容器是否已连接,请使用docker network inspect
命令。用于docker network disconnect
从网络中删除容器。
一旦连接到网络中,容器就可以仅使用另一个容器的 IP 地址或名称进行通信。对于overlay
支持多主机连接的网络或自定义插件,连接到同一多主机网络但从不同引擎启动的容器也可以通过这种方式进行通信。
您可以将容器连接到一个或多个网络。网络不必是同一类型。例如,您可以连接单个容器网桥和覆盖网络。
docker网络创建
创建网络
用法
$ docker network create [OPTIONS] NETWORK
说明
创建一个新网络。DRIVER
接受bridge
或哪些是overlay
内置网络驱动程序。如果您安装了第三方或您自己的自定义网络驱动程序,您也可以DRIVER
在此处指定。如果您不指定该 --driver
选项,该命令会自动为您创建一个bridge
网络。当您安装 Docker Engine 时,它会bridge
自动创建一个网络。该网络对应于docker0
Engine 传统上所依赖的网桥。当您启动一个新容器时, docker run
它会自动连接到这个桥接网络。您无法删除此默认桥接网络,但可以使用该network create
命令创建新的桥接网络。
$ docker network create -d bridge my-bridge-network
桥接网络是单个引擎安装上的隔离网络。如果你想创建一个跨越多个 Docker 主机的网络,每个主机都运行一个引擎,你必须启用 Swarm 模式,并创建一个overlay
网络。要阅读更多关于 Swarm 模式覆盖网络的信息,请参阅“使用覆盖网络”。
一旦你启用了 swarm 模式,你就可以创建一个 swarm-scoped overlay 网络:
$ docker network create --scope=swarm --attachable -d overlay my-multihost-network
默认情况下,swarm-scoped 网络不允许连接手动启动的容器。添加此限制是为了防止有权访问 swarm 集群中的非管理节点的人运行能够访问 swarm 服务的网络堆栈的容器。
上面示例中使用的--attachable
选项禁用了此限制,并允许 swarm 服务和手动启动的容器连接到 oerlay 网络。
网络名称必须是唯一的。Docker 守护进程会尝试识别命名冲突,但这并不能保证。避免名称冲突是用户的责任。
覆盖网络限制
/24
当您使用默认的基于 VIP 的端点模式创建网络时,您应该使用块(默认)创建覆盖网络,这将您限制为 256 个 IP 地址。此建议解决 了 swarm 模式的局限性。如果您需要超过 256 个 IP 地址,请不要增加 IP 块大小。您可以将dnsrr
端点模式与外部负载均衡器一起使用,也可以使用多个较小的覆盖网络。有关不同端点模式的更多信息,请参阅 配置服务发现 。
有关此命令的示例用法,请参阅下面的示例部分。
选项
姓名,简写 | 默认 | 描述 |
---|---|---|
--attachable |
启用手动容器附件 | |
--aux-address |
网络驱动程序使用的辅助 IPv4 或 IPv6 地址 | |
--config-from |
从中复制配置的网络 | |
--config-only |
创建仅配置网络 | |
--driver ,-d |
bridge |
管理网络的驱动程序 |
--gateway |
主子网的 IPv4 或 IPv6 网关 | |
--ingress |
创建群路由网状网络 | |
--internal |
限制外部访问网络 | |
--ip-range |
从子范围分配容器 ip | |
--ipam-driver |
IP 地址管理驱动程序 | |
--ipam-opt |
设置 IPAM 驱动程序特定选项 | |
--ipv6 |
启用 IPv6 网络 | |
--label |
在网络上设置元数据 | |
--opt ,-o |
设置驱动程序特定选项 | |
--scope |
控制网络范围 | |
--subnet |
表示网段的 CIDR 格式的子网 | |
--help |
打印使用 |
例子
连接容器
启动容器时,使用--network
标志将其连接到网络。此示例将busybox
容器添加到mynet
网络:
$ docker run -itd --network=mynet busybox
如果要在容器已经运行后将容器添加到网络,请使用docker network connect
子命令。
您可以将多个容器连接到同一个网络。连接后,容器可以仅使用另一个容器的 IP 地址或名称进行通信。对于overlay
支持多主机连接的网络或自定义插件,连接到同一多主机网络但从不同引擎启动的容器也可以通过这种方式进行通信。
您可以使用命令断开容器与网络的连接docker network disconnect
。
指定高级选项
当您创建网络时,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
标志,引擎会从首选池中为您选择一个。对于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
确保您的子网不重叠。如果他们这样做,网络创建失败并且引擎返回错误。
桥接驱动程序选项
创建自定义网络时,默认网络驱动程序(即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
任何网络驱动程序,同样与它们的近似等价物docker daemon
。
争论 | 相等的 | 描述 |
---|---|---|
--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)
默认情况下,当您将容器连接到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
您可以通过在网络创建期间将网络范围提升到来实现。然后,您将能够在创建服务时使用该网络。
$ 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
docker网络断开连接
断开容器与网络的连接
用法
$ docker network disconnect [OPTIONS] NETWORK CONTAINER
说明
断开容器与网络的连接。容器必须正在运行才能将其与网络断开连接。
有关此命令的示例用法,请参阅下面的示例部分。
选项
姓名,简写 | 默认 | 描述 |
---|---|---|
--force ,-f |
强制容器断开网络连接 | |
--help |
打印使用 |
例子
$ docker network disconnect multi-host-network container1
docker网络检查
显示一个或多个网络的详细信息
用法
$ docker network inspect [OPTIONS] NETWORK [NETWORK...]
说明
返回有关一个或多个网络的信息。默认情况下,此命令在 JSON 对象中呈现所有结果。
选项
姓名,简写 | 默认 | 描述 |
---|---|---|
--format ,-f |
使用自定义模板格式化输出: ‘json’:以 JSON 格式打印 ‘TEMPLATE’:使用给定的 Go 模板打印输出。有关使用模板格式化输出的更多信息,请参阅 https://docs.docker.com/go/formatting/ | |
--verbose ,-v |
用于诊断的详细输出 | |
--help |
打印使用 |
docker网络 ls
列出网络
用法
$ docker network ls [OPTIONS]
说明
列出引擎daemon
知道的所有网络。这包括跨越集群中多个主机的网络。
有关此命令的示例用法,请参阅下面的示例部分。
选项
姓名,简写 | 默认 | 描述 |
---|---|---|
--filter ,-f |
提供过滤值(例如driver=bridge ) |
|
--format |
使用自定义模板格式化输出: ‘table’:以带有列标题的表格格式打印输出(默认) ‘table TEMPLATE’:使用给定的 Go 模板以表格格式打印输出 ‘json’:以 JSON 格式打印 ‘TEMPLATE’:打印使用给定的 Go 模板输出。有关使用模板格式化输出的更多信息,请参阅 https://docs.docker.com/go/formatting/ | |
--no-trunc |
不要截断输出 | |
--quiet ,-q |
仅显示网络 ID | |
--help |
打印使用 |
例子
列出所有网络
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
7fca4eb8c647 bridge bridge local
9f904ee27bf5 none null local
cf03ee007fb4 host host local
78b03ee04fc4 multi-host overlay swarm
使用--no-trunc
选项显示完整的网络 ID:
$ docker network ls --no-trunc
NETWORK ID NAME DRIVER SCOPE
18a2866682b85619a026c81b98a5e375bd33e1b0936a26cc497c283d27bae9b3 none null local
c288470c46f6c8949c5f7e5099b5b7947b07eabe8d9a27d79a9cbf111adcbf47 host host local
7b369448dccbf865d397c8d2be0cda7cf7edc6b0945f77d2529912ae917a0185 bridge bridge local
95e74588f40db048e86320c6526440c504650a1ff3e9f7d60a497c4d2163e5bd foo bridge local
63d1ff1f77b07ca51070a8c227e962238358bd310bde1529cf62e6c307ade161 dev bridge local
过滤(–filter)
过滤标志(-f
或--filter
)格式是一key=value
对。如果有多个过滤器,则传递多个标志(例如--filter "foo=bar" --filter "bif=baz"
)。多个过滤器标志组合为一个OR
过滤器。例如, -f type=custom -f type=builtin
同时返回custom
和builtin
网络。
目前支持的过滤器有:
- 司机
- id(网络的id)
- 标签(
label=<key>
或label=<key>=<value>
) - 名称(网络名称)
- 范围 (
swarm|global|local
) - 键入 (
custom|builtin
)
司机
过滤器根据driver
驱动程序匹配网络。
以下示例将网络与bridge
驱动程序匹配:
$ docker network ls --filter driver=bridge
NETWORK ID NAME DRIVER SCOPE
db9db329f835 test1 bridge local
f6e212da9dfd test2 bridge local
ID
过滤器匹配网络 ID的id
全部或部分。
以下过滤器匹配 ID 包含该 63d1ff1f77b0...
字符串的所有网络。
$ docker network ls --filter id=63d1ff1f77b07ca51070a8c227e962238358bd310bde1529cf62e6c307ade161
NETWORK ID NAME DRIVER SCOPE
63d1ff1f77b0 dev bridge local
您还可以过滤 ID 中的子字符串,如下所示:
$ docker network ls --filter id=95e74588f40d
NETWORK ID NAME DRIVER SCOPE
95e74588f40d foo bridge local
$ docker network ls --filter id=95e
NETWORK ID NAME DRIVER SCOPE
95e74588f40d foo bridge local
标签
过滤器根据单独或一个值label
的存在来匹配网络。label``label
以下过滤器将网络与usage
标签匹配,无论其值如何。
$ docker network ls -f "label=usage"
NETWORK ID NAME DRIVER SCOPE
db9db329f835 test1 bridge local
f6e212da9dfd test2 bridge local
以下过滤器将网络与usage
标签和prod
值相匹配。
$ docker network ls -f "label=usage=prod"
NETWORK ID NAME DRIVER SCOPE
f6e212da9dfd test2 bridge local
姓名
过滤器匹配网络名称的name
全部或部分。
以下过滤器匹配名称包含该foobar
字符串的所有网络。
$ docker network ls --filter name=foobar
NETWORK ID NAME DRIVER SCOPE
06e7eef0a170 foobar bridge local
您还可以过滤名称中的子字符串,如下所示:
$ docker network ls --filter name=foo
NETWORK ID NAME DRIVER SCOPE
95e74588f40d foo bridge local
06e7eef0a170 foobar bridge local
范围
过滤器根据scope
范围匹配网络。
以下示例将网络与swarm
范围匹配:
$ docker network ls --filter scope=swarm
NETWORK ID NAME DRIVER SCOPE
xbtm0v4f1lfh ingress overlay swarm
ic6r88twuu92 swarmnet overlay swarm
以下示例将网络与local
范围匹配:
$ docker network ls --filter scope=local
NETWORK ID NAME DRIVER SCOPE
e85227439ac7 bridge bridge local
0ca0e19443ed host host local
ca13cc149a36 localnet bridge local
f9e115d2de35 none null local
类型
过滤器type
支持两个值;builtin
显示预定义的网络 ( bridge
, none
, host
),而custom
显示用户定义的网络。
以下过滤器匹配所有用户定义的网络:
$ docker network ls --filter type=custom
NETWORK ID NAME DRIVER SCOPE
95e74588f40d foo bridge local
63d1ff1f77b0 dev bridge local
通过这个标志,它允许批量清理。例如,使用此过滤器删除所有用户定义的网络:
$ docker network rm `docker network ls --filter type=custom -q`
尝试删除连接了容器的网络时会发出警告。
格式化输出(–format)
格式化选项 ( --format
) 使用 Go 模板漂亮地打印网络输出。
下面列出了 Go 模板的有效占位符:
占位符 | 描述 |
---|---|
.ID |
网络编号 |
.Name |
网络名字 |
.Driver |
网络驱动 |
.Scope |
网络范围(本地、全球) |
.IPv6 |
网络上是否启用了 IPv6。 |
.Internal |
网络是否是内部网络。 |
.Labels |
分配给网络的所有标签。 |
.Label |
此网络的特定标签的值。例如{{.Label "project.version"}} |
.CreatedAt |
网络创建时间 |
使用该--format
选项时,该network ls
命令将完全按照模板声明的方式输出数据,或者在使用 table
指令时也包括列标题。
以下示例使用不带标题的模板, 并为所有网络输出由冒号 ( ) 分隔的ID
和条目:Driver``:
$ docker network ls --format "{{.ID}}: {{.Driver}}"
afaaab448eb2: bridge
d1584f8dc718: host
391df270dc66: null
要以 JSON 格式列出所有网络,请使用json
指令:
$ docker network ls --format json
{"CreatedAt":"2021-03-09 21:41:29.798999529 +0000 UTC","Driver":"bridge","ID":"f33ba176dd8e","IPv6":"false","Internal":"false","Labels":"","Name":"bridge","Scope":"local"}
{"CreatedAt":"2021-03-09 21:41:29.772806592 +0000 UTC","Driver":"host","ID":"caf47bb3ac70","IPv6":"false","Internal":"false","Labels":"","Name":"host","Scope":"local"}
{"CreatedAt":"2021-03-09 21:41:29.752212603 +0000 UTC","Driver":"null","ID":"9d096c122066","IPv6":"false","Internal":"false","Labels":"","Name":"none","Scope":"local"}
docker网络修剪
删除所有未使用的网络
用法
$ docker network prune [OPTIONS]
说明
删除所有未使用的网络。未使用的网络是那些没有被任何容器引用的网络。
有关此命令的示例用法,请参阅下面的示例部分。
选项
姓名,简写 | 默认 | 描述 |
---|---|---|
--filter |
提供过滤值(例如until=<timestamp> ) |
|
--force ,-f |
不提示确认 | |
--help |
打印使用 |
例子
$ docker network prune
WARNING! This will remove all custom networks not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Networks:
n1
n2
过滤(–filter)
过滤标志(--filter
)格式为“key=value”。如果有多个过滤器,则传递多个标志(例如,--filter "foo=bar" --filter "bif=baz"
)
目前支持的过滤器有:
- until (
<timestamp>
) - 仅删除在给定时间戳之前创建的网络 - label (
label=<key>
,label=<key>=<value>
,label!=<key>
, orlabel!=<key>=<value>
) - 仅删除带有(或不带,如果label!=...
使用)指定标签的网络。
过滤器until
可以是 Unix 时间戳、日期格式的时间戳或 Go 持续时间字符串(例如10m
, 1h30m
)相对于守护进程机器的时间计算。日期格式时间戳支持的格式包括 RFC3339Nano、RFC3339、 2006-01-02T15:04:05
、2006-01-02T15:04:05.999999999
、2006-01-02Z07:00
和2006-01-02
。如果您未在时间戳末尾提供Z
或+-00:00
时区偏移量,则将 使用守护程序上的本地时区。当提供 Unix 时间戳时,输入 seconds[.nanoseconds],其中秒是自 1970 年 1 月 1 日(午夜 UTC/GMT)以来经过的秒数,不包括闰秒(又名 Unix 纪元或 Unix 时间),以及可选的 .纳秒字段是几分之一秒,长度不超过九位数字。
过滤器label
接受两种格式。一种是label=...
(label=<key>
或label=<key>=<value>
),它删除具有指定标签的网络。另一种格式是label!=...
(label!=<key>
或label!=<key>=<value>
),它会删除没有指定标签的网络。
以下删除 5 分钟前创建的网络。请注意,永远不会修剪bridge
、host
和等系统网络:none
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
7430df902d7a bridge bridge local
ea92373fd499 foo-1-day-ago bridge local
ab53663ed3c7 foo-1-min-ago bridge local
97b91972bc3b host host local
f949d337b1f5 none null local
$ docker network prune --force --filter until=5m
Deleted Networks:
foo-1-day-ago
$ docker network ls
docker网络 rm
删除一个或多个网络
用法
$ docker network rm NETWORK [NETWORK...]
说明
按名称或标识符删除一个或多个网络。要删除网络,您必须首先断开连接到它的所有容器。
有关此命令的示例用法,请参阅下面的示例部分。
选项
姓名,简写 | 默认 | 描述 |
---|---|---|
--force ,-f |
如果网络不存在,请不要出错 | |
--help |
打印使用 |
例子
删除网络
要删除名为“我的网络”的网络:
$ docker network rm my-network
删除多个网络
要在单个docker network rm
命令中删除多个网络,请提供多个网络名称或 ID。以下示例删除了一个 id 3695c422697f
为 的网络和一个名为 的网络my-network
:
$ docker network rm 3695c422697f my-network
当您指定多个网络时,该命令会依次尝试删除每个网络。如果删除一个网络失败,该命令将继续到列表中的下一个并尝试删除它。该命令报告每次删除的成功或失败。
评论区