Docker网络之bridge网络

本文详述Docker桥接网络的工作原理,包括内置与自定义桥接网络的区别,如DNS功能、容器间的通信方式及环境变量共享。并介绍如何创建、配置和管理自定义桥接网络。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bridge网络相当于用软件的方法在宿主机内部虚拟一个交换机,它是一个二层网络设备。在一台宿主机内可以创建多个bridge,连接在同一bridge上的容器可以直接通信,连接在不同bridge上的容器不能直接通信。

不能直接通信不代表不可以通信,实际上连接在不同bridge上的容器,即使bridge分布在不同的节点上,也是可以通信的,但是必需通信三层路由,相当于是通过路由器将多个bridge连接起来。

Docker内置了一个名为bridge的bridge网络,容器默认使用的网络。建议不要使用这个内置网络,如果需要应该自己创建,内置的网络有很多限制,自已创建的网络才有足够的控制权。

用户自定义bridge网络与内置bridge网络的区别

  • 用户自定义bridge网络的隔离性与操作性更好。这一段没看明白,为什么连接到默认bridge网络的容器必需通过-p选项对外暴露端口才能互相访问呢?连接在同一个bridge上,本来就是互通的。
  • 用户自定义bridge网络提供DNS功能,默认bridge不提供。如果使用默认bridge,不同容器之间的互通只能直接使用IP地址或者是Link,而用户自定义网络可以直接使用容器名称。
  • 运行中的容器可以随时离开、加入用户自定义bridge网络,默认bridge网络不行。必需先停止运行容器,再重新创建才能连接到其它网络。
  • 用户自定义bridge网络可以灵活创建、配置。
  • 默认bridge网络共享环境变量。连接在默认bridge网络上的容器可以通过--link标志共享环境变量,用户自定义bridge网络默认不可以,但是有多种解决方案。:
    第一种是将需要共享的变量放在文件中,通过docker volume功能将它绑定到多个容器上。
    第二种是使用docker compose,将需要共享的环境变量放置在compose的.env文件中。
    第三种是使用docker swarm中有关配置的高级功能secrets、configs。

用户自定义bridge网络管理

创建网络:

$ docker network create my-net

在上述命令中可以设置了网网段、网关等,详细查看https://docs.docker.com/engine/reference/commandline/network_create/#specify-advanced-options或者运行:

docker network create --help

 删除网络:

$ docker network rm my-net

连接容器到用户自定义bridge网络 

命令如下:

$ docker create --name my-nginx \
  --network my-net \
  --publish 8080:80 \
  nginx:latest

my-net是用户自定义bridge网络的名称,8080:80表示将容器的80端口映射到宿主机的8080端口。

运行中的容器加入用户自定义网络:

$ docker network connect my-net my-nginx

 容器离开用户自定义网络

如下:

$ docker network disconnect my-net my-nginx

配置默认bridge网络 

Docker守护进程有自己的配置文件,名为daemon.json,其中包含默认bridge网络的配置信息,可以修改,如下:

{
  "bip": "192.168.1.5/24",
  "fixed-cidr": "192.168.1.5/25",
  "fixed-cidr-v6": "2001:db8::/64",
  "mtu": 1500,
  "default-gateway": "10.20.1.1",
  "default-gateway-v6": "2001:db8:abcd::89",
  "dns": ["10.20.1.2","10.20.1.3"]
}

修改完成以后需要重新启动docker daemon。

<think>好的,用户现在想了解如何在Linux上查看Docker网络是否是bridge模式。之前已经讨论过如何检查端口是否属于桥接设备,所以这次需要专注于Docker特定的网络配置。 首先,我得回忆一下Docker网络模式,常见的包括bridge、host、none等。用户关心的是如何确定某个网络是否使用了bridge模式。需要分步骤说明检查方法。 可能的方法包括使用docker network ls列出所有网络,然后查看类型。接着,用docker network inspect来查看具体网络的详细信息,特别是配置中的Driver字段是否为bridge。另外,可能需要检查容器是否连接到该网络,以及网络接口的情况,比如docker0桥是否存在。 另外,用户可能还不太清楚默认的bridge网络和自定义bridge网络的区别,需要简单说明一下。同时,检查容器的网络设置,比如使用docker inspect查看容器的NetworkSettings,确认网络模式是否为bridge。 需要注意是否需要安装某些工具,或者权限问题,比如是否需要sudo。另外,如果用户不熟悉命令行,可能需要给出具体的命令示例和输出解读,例如在docker network inspect的输出中,找到Driver和Config部分的内容。 还要考虑用户可能的实际应用场景,比如在部署容器时如何确认网络模式是否正确,或者排查网络连接问题。这时候,检查网络模式是否为bridge可能是解决问题的第一步。 总结下来,回答的结构应该是先列出所有Docker网络,然后检查特定网络的类型,再查看容器是否连接到该网络,最后确认网络接口如docker0桥的情况。同时,给出示例命令和输出,帮助用户直观理解。</think>在Linux系统中,可以通过以下方法查看Docker网络是否使用`bridge`模式: --- ### **一、查看所有Docker网络及模式** #### 1. 列出所有Docker网络 ```bash docker network ls ``` **示例输出**: ``` NETWORK ID NAME DRIVER SCOPE a1b2c3d4e5f6 bridge bridge local d7e8f9g0h1i2 host host local j3k4l5m6n7o8 my_custom_net bridge local p9q0r1s2t3u4 none null local ``` - **关键字段**: - `DRIVER`列显示网络驱动类型 - 默认Docker网络`bridge`即为桥接模式 --- ### **二、检查特定网络的详细信息** #### 1. 查看网络配置详情 ```bash docker network inspect <网络名称或ID> # 示例:查看默认bridge网络 docker network inspect bridge ``` **输出关键字段**: ```json { "Name": "bridge", "Driver": "bridge", "IPAM": { "Config": [ { "Subnet": "172.17.0.0/16" } ] }, "Containers": { "容器ID1": { "EndpointID": "...", "IPv4Address": "172.17.0.2/16" } } } ``` - **验证点**: - `"Driver": "bridge"`表示使用桥接模式 - `"Subnet"`字段显示该桥接网络的IP段 --- ### **三、验证桥接设备是否存在** #### 1. 查看Docker默认桥接设备`docker0` ```bash ip link show docker0 # 检查设备是否存在 brctl show docker0 # 查看桥接关联的虚拟端口 ``` **预期输出**: ``` bridge name bridge id STP enabled interfaces docker0 8000.0242a5a6b456 no veth12345 veth67890 ``` - **关键验证**: - 若`docker0`设备存在且包含`veth*`虚拟端口,则桥接模式正常 - 容器通过`veth`虚拟网卡对连接到`docker0`桥接 --- ### **四、检查容器的网络模式** #### 1. 查看容器使用的网络驱动 ```bash docker inspect <容器名或ID> --format='{{.HostConfig.NetworkMode}}' ``` - **输出示例**: - `bridge`:表示容器使用桥接模式 - `host`:表示使用主机模式 #### 2. 查看容器IP地址归属 ```bash docker inspect <容器名或ID> | grep -A 10 "Networks" ``` - **验证点**: - 若IP地址属于`172.17.0.0/16`或其他自定义桥接子网,则为桥接模式 --- ### **五、桥接模式 vs 其他模式对比** | 模式 | 特点 | |------------|----------------------------------------------------------------------| | **bridge** | 默认模式,容器通过`docker0`桥接与宿主机通信,隔离性强 | | **host** | 容器直接使用宿主机网络栈,无IP隔离,性能更高 | | **none** | 无网络配置,需手动添加网络接口 | --- ### **六、操作总结** | 目标 | 命令 | |---------------------------|------------------------------------------| | 列出所有Docker网络 | `docker network ls` | | 检查网络是否为桥接模式 | `docker network inspect <网络名>` | | 查看Docker桥接设备状态 | `brctl show docker0` 或 `ip -d link show docker0` | | 验证容器网络模式 | `docker inspect <容器名> --format='{{.HostConfig.NetworkMode}}'` | --- ### **常见场景** 1. **默认bridge网络**: - 容器通过`docker0`桥接通信 - 自动分配`172.17.0.0/16`段IP地址 2. **自定义bridge网络**: ```bash docker network create --driver=bridge my_bridge ``` - 手动指定子网:`--subnet=192.168.100.0/24` --- ### **故障排查** - **如果桥接网络异常**: 1. 检查Docker服务状态:`systemctl status docker` 2. 确认`docker0`桥接设备存在:`ip link show docker0` 3. 重启Docker服务:`systemctl restart docker`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值