欢迎访问shiker.tech

请允许在我们的网站上展示广告

您似乎使用了广告拦截器,请关闭广告拦截器。我们的网站依靠广告获取资金。

【译文】docker网络管理命令
(last modified Jun 26, 2023, 12:31 PM )
by
侧边栏壁纸
  • 累计撰写 176 篇文章
  • 累计创建 61 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

【译文】docker网络管理命令

橙序员
2023-02-12 / 0 评论 / 0 点赞 / 390 阅读 / 5,807 字 / 正在检测百度是否收录... 正在检测必应是否收录...
文章摘要(AI生成)

管理网络用法$ docker network COMMAND说明管理网络。您可以使用子命令来创建、检查、列出、删除、修剪、连接和断开网络。docker网络连接将容器连接到网络用法🔗$ docker network connect [OPTIONS] NETWORK CONTAINER有关此命令可用

用法

$ docker network COMMAND

说明

管理网络。您可以使用子命令来创建、检查、列出、删除、修剪、连接和断开网络。

docker网络连接

将容器连接到网络

用法🔗

$ docker network connect [OPTIONS] NETWORK CONTAINER

有关此命令可用的概述,请参阅选项部分。OPTIONS

说明

将容器连接到网络。您可以按名称或 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

有关此命令可用的概述,请参阅选项部分。OPTIONS

说明

创建一个新网络。DRIVER接受bridge或哪些是overlay内置网络驱动程序。如果您安装了第三方或您自己的自定义网络驱动程序,您也可以DRIVER在此处指定。如果您不指定该 --driver选项,该命令会自动为您创建一个bridge网络。当您安装 Docker Engine 时,它会bridge自动创建一个网络。该网络对应于docker0Engine 传统上所依赖的网桥。当您启动一个新容器时, 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 网络bridgehost.

$ 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

有关此命令可用的概述,请参阅选项部分。OPTIONS

说明

断开容器与网络的连接。容器必须正在运行才能将其与网络断开连接。

有关此命令的示例用法,请参阅下面的示例部分

选项

姓名,简写 默认 描述
--force,-f 强制容器断开网络连接
--help 打印使用

例子

$ docker network disconnect multi-host-network container1

docker网络检查

显示一个或多个网络的详细信息

用法

$ docker network inspect [OPTIONS] NETWORK [NETWORK...]

有关此命令可用的概述,请参阅选项部分。OPTIONS

说明

返回有关一个或多个网络的信息。默认情况下,此命令在 JSON 对象中呈现所有结果。

选项

姓名,简写 默认 描述
--format,-f 使用自定义模板格式化输出: ‘json’:以 JSON 格式打印 ‘TEMPLATE’:使用给定的 Go 模板打印输出。有关使用模板格式化输出的更多信息,请参阅 https://docs.docker.com/go/formatting/
--verbose,-v 用于诊断的详细输出
--help 打印使用

docker网络 ls

列出网络

用法

$ docker network ls [OPTIONS]

有关此命令可用的概述,请参阅选项部分。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同时返回custombuiltin网络。

目前支持的过滤器有:

  • 司机
  • 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]

有关此命令可用的概述,请参阅选项部分。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>, or label!=<key>=<value>) - 仅删除带有(或不带,如果label!=...使用)指定标签的网络。

过滤器until可以是 Unix 时间戳、日期格式的时间戳或 Go 持续时间字符串(例如10m, 1h30m)相对于守护进程机器的时间计算。日期格式时间戳支持的格式包括 RFC3339Nano、RFC3339、 2006-01-02T15:04:052006-01-02T15:04:05.9999999992006-01-02Z07:002006-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 分钟前创建的网络。请注意,永远不会修剪bridgehost和等系统网络: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...]

有关此命令可用的概述,请参阅选项部分。OPTIONS

说明

按名称或标识符删除一个或多个网络。要删除网络,您必须首先断开连接到它的所有容器。

有关此命令的示例用法,请参阅下面的示例部分

选项

姓名,简写 默认 描述
--force,-f 如果网络不存在,请不要出错
--help 打印使用

例子

删除网络

要删除名为“我的网络”的网络:

$ docker network rm my-network

删除多个网络

要在单个docker network rm命令中删除多个网络,请提供多个网络名称或 ID。以下示例删除了一个 id 3695c422697f为 的网络和一个名为 的网络my-network

$ docker network rm 3695c422697f my-network

当您指定多个网络时,该命令会依次尝试删除每个网络。如果删除一个网络失败,该命令将继续到列表中的下一个并尝试删除它。该命令报告每次删除的成功或失败。

0

评论区