Docker自定义网络的实现步骤

 更新时间:2026年04月22日 15:35:31   作者:Zestapse  
本文详细介绍了Docker网络的基础概念、自定义网络的重要性及其类型bridge、overlay、macvlan等,具有一定的参考价值,感兴趣的可以了解一下

一、Docker网络基础与自定义网络

在Docker的生态系统中,网络扮演着连接各个容器的关键角色,它确保了容器之间以及容器与外部世界的通信顺畅。

(一)Docker网络的基本概念

Docker采用了一种隔离的网络模式,使得容器内部的网络环境与宿主机以及其他容器相互隔离,但同时又提供了灵活的通信机制。每个Docker容器都有自己独立的网络命名空间,这意味着它们拥有自己的IP地址、网络接口、路由表等网络资源,就像一个独立的小型计算机。

例如,当我们启动一个容器时,Docker会自动为其分配一个IP地址,该地址通常位于一个私有网段内,容器可以通过这个IP地址与同一宿主机或其他宿主机上的容器进行通信。

(二)默认网络的局限性

如果不使用Docker自定义网络,仅依赖Docker默认提供的网络模式(如bridge、host、none等),会面临隔离性差、通信配置复杂、跨主机通信受限、端口冲突频繁、配置不灵活、管理困难等问题,这些问题在单体应用场景中可能影响不大,但在微服务、分布式架构或企业级应用中,会直接制约系统的可扩展性、安全性和可维护性。因此,自定义网络是Docker在生产环境中不可或缺的核心功能。

1. 网络隔离性极差,安全风险高

默认的bridge网络是Docker最常用的默认网络,但所有连接到该网络的容器都处于同一个广播域中,容器之间可以通过IP地址直接通信,且缺乏精细化的访问控制策略。

  • 例如:如果将前端服务、后端服务、数据库容器都接入默认bridge网络,前端容器可能直接访问数据库容器,存在越权访问风险;若其中一个容器被攻击,攻击者可能通过网络渗透到其他容器,导致整个系统安全防线失效。
  • host网络则完全没有隔离性——容器直接使用宿主机的网络栈,容器的端口与宿主机端口共用,容器的网络行为与宿主机无差异,一旦容器被入侵,可能直接威胁宿主机安全。

2. 容器通信依赖IP,配置复杂且易出错

默认网络中,容器之间的通信严重依赖IP地址,而非容器名称,这会导致两个核心问题:

  1. IP地址动态变化:容器重启后,Docker可能会重新分配IP地址,若其他容器通过固定IP访问该容器,会直接导致通信失败,需要手动重新配置,极大增加维护成本。
  2. DNS解析功能弱:默认bridge网络虽然支持通过--link参数实现容器名称到IP的映射,但该功能已被Docker官方标记为“过时”,且仅支持单向映射(如A链接B后,A可通过名称访问B,但B无法访问A),无法满足复杂应用的双向通信需求。

默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上

3. 跨主机通信完全受限,无法支持分布式架构

默认网络(尤其是bridge网络)仅支持同一宿主机内的容器通信,无法实现跨主机容器的网络互联。

  • 例如:在分布式系统中,若需要将服务部署在多台宿主机上(如微服务架构中,订单服务在宿主机A,支付服务在宿主机B),默认网络无法让两个服务的容器直接通信,必须依赖宿主机端口映射或第三方工具(如反向代理),这会导致网络链路变长、延迟增加,且配置极其繁琐。
  • 即使使用host网络,跨主机通信也需手动配置宿主机间的路由或端口转发,无法像overlay自定义网络那样自动构建跨主机虚拟网络,难以支撑大规模分布式应用部署。

4. 端口冲突频发,资源管理混乱

默认网络中,容器与外部通信依赖宿主机的端口映射(如-p 8080:80),但由于缺乏网络级别的端口规划,极易出现端口冲突

  • 例如:两个容器都需要映射80端口到宿主机,若不手动指定不同的宿主机端口(如8080:808081:80),会直接启动失败;若容器数量较多(如微服务架构中数十个服务),手动管理端口映射会变得极其混乱,且容易因端口重复导致服务不可用。

5. 缺乏精细化配置能力,无法适配实际网络环境

默认网络的配置项极其有限,无法根据实际需求调整网络参数,例如:

  • 无法指定IP地址范围:默认bridge网络的IP网段固定(通常为172.17.0.0/16),若该网段与企业内部网络冲突(如企业内网已使用172.17.x.x),会导致容器无法访问内网资源,且无法修改默认网段。
  • 无法自定义网关和DNS:默认网络使用Docker自动分配的网关和DNS服务器,若企业内网需要使用特定的网关(如连接VPN)或私有DNS服务器(如内部服务域名解析),默认网络无法满足需求,会导致容器无法解析内网域名或访问外部网络。

6. 网络管理混乱,排查问题难度大

当容器数量增多时,默认网络缺乏清晰的网络划分,所有容器混杂在一个或少数几个网络中,会导致:

  • 网络关系不清晰:无法通过网络名称区分“开发环境容器”“测试环境容器”“生产环境容器”,排查跨容器通信问题时,需要逐个检查容器IP和端口,效率极低。
  • 流量监控困难:默认网络没有独立的网络接口标识(如自定义bridge网络会生成br-xxx虚拟网桥),使用tcpdump等工具监控网络流量时,难以区分不同服务的流量,无法精准定位网络瓶颈或异常请求。

(三)自定义网络的重要意义

正是由于默认网络存在上述局限性,Docker自定义网络应运而生。Docker自定义网络就像是为容器量身打造的专属通道,它具有以下重要意义:

  1. 提供更精细的网络控制:用户可以根据实际需求自定义网络的各种参数,如IP地址范围、子网掩码、网关等,实现对网络的精准管理。
  2. 增强网络隔离性:通过创建不同的自定义网络,可以将不同的应用服务或环境隔离开来,例如将开发环境、测试环境和生产环境的容器分别放置在不同的网络中,防止它们之间的相互干扰,提高系统的安全性。
  3. 优化DNS解析:自定义网络内置了更完善的DNS解析功能,容器之间可以直接通过容器名称进行通信,无需记住复杂的IP地址,极大地简化了容器之间的通信配置。
  4. 适应复杂应用场景:在微服务架构等复杂的应用场景中,不同的服务可能需要不同的网络策略和通信方式,自定义网络能够满足这些个性化的需求,为应用的部署和运行提供可靠的网络支持。

二、Docker自定义网络类型

Docker提供了多种类型的自定义网络,每种类型都有其独特的特点和适用场景。下面将详细介绍常见的自定义网络类型。

(一)bridge网络

bridge网络是Docker中最常用的自定义网络类型之一,适用于同一主机上的容器之间进行通信。它通过在宿主机上创建一个虚拟网桥,将连接到该网桥的容器连接起来,形成一个独立的局域网。

  1. 特点
  • 容器之间可以通过IP地址或容器名称进行通信。
  • 提供了一定的网络隔离性,不同bridge网络中的容器默认无法通信。
  • 可以通过端口映射实现容器与外部网络的通信。
  1. 操作示例
    创建一个名为my-bridge-network的bridge网络:
docker network create --driver bridge my-bridge-network

上述命令中,--driver bridge指定了网络类型为bridge。

启动一个容器并将其连接到my-bridge-network网络:

docker run -d --name container1 --network my-bridge-network nginx

此时,container1容器就加入了my-bridge-network网络,可以与该网络中的其他容器进行通信。

要查看网络中的容器,可以使用以下命令:

docker network inspect my-bridge-network

在输出结果中,可以找到“Containers”部分,其中列出了连接到该网络的所有容器信息,包括容器ID、名称、IP地址等。

(二)overlay网络

overlay网络主要用于跨主机的容器通信,它可以将多个宿主机上的Docker守护进程连接起来,形成一个虚拟的网络,使得不同宿主机上的容器能够像在同一主机上一样进行通信。

  1. 特点
  • 支持跨主机通信,适用于分布式应用部署。
  • 基于VXLAN技术,能够在底层网络之上构建一个逻辑上的虚拟网络,实现数据的封装和传输。
  • 需要一个键值存储服务(如Consul、etcd、ZooKeeper)来维护网络的配置信息和节点状态。
  1. 操作示例
    首先,需要搭建一个键值存储服务,这里以Consul为例。在其中一台宿主机上启动Consul容器:
docker run -d -p 8500:8500 --name consul progrium/consul -server -bootstrap

然后,在所有需要加入overlay网络的宿主机上配置Docker守护进程,使其连接到Consul。编辑Docker的配置文件(如/etc/docker/daemon.json),添加以下内容:

{
  "cluster-store": "consul://192.168.1.100:8500",
  "cluster-advertise": "192.168.1.101:2376"
}

其中,192.168.1.100是运行Consul容器的宿主机IP地址,192.168.1.101是当前宿主机的IP地址。配置完成后,重启Docker服务:

systemctl restart docker

接下来,创建一个overlay网络:

docker network create --driver overlay my-overlay-network

现在,在不同宿主机上启动容器并连接到my-overlay-network网络,这些容器就可以跨主机进行通信了。例如,在宿主机A上启动容器:

docker run -d --name containerA --network my-overlay-network nginx

在宿主机B上启动容器:

docker run -d --name containerB --network my-overlay-network nginx

此时,containerA和containerB可以相互ping通,实现跨主机通信。

(三)macvlan网络

macvlan网络允许容器像物理机一样拥有独立的MAC地址,使得容器可以直接连接到物理网络,而无需通过宿主机的网桥进行转发。这种网络类型适用于需要容器直接暴露在物理网络中的场景,例如需要容器拥有独立的网络身份,或者需要与物理网络中的设备进行直接通信的情况。

  1. 特点
  • 容器拥有独立的MAC地址和IP地址,与物理网络中的设备处于同一网络层面。
  • 通信效率高,因为数据不需要经过宿主机的网桥转发。
  • 配置相对复杂,需要对物理网络进行一定的设置,如启用网卡的混杂模式
  1. 操作示例
    首先,需要确保宿主机的物理网卡支持混杂模式,并启用该模式。以eth0网卡为例:
ip link set eth0 promisc on

创建一个macvlan网络,指定物理网卡和IP地址范围:

docker network create --driver macvlan --subnet 192.168.0.0/24 --gateway 192.168.0.1 -o parent=eth0 my-macvlan-network

其中,--subnet指定了IP地址范围,--gateway指定了网关,-o parent=eth0指定了绑定的物理网卡。

启动一个容器并连接到my-macvlan-network网络:

docker run -d --name container3 --network my-macvlan-network nginx

此时,container3容器会获得一个来自192.168.0.0/24网段的IP地址和独立的MAC地址,可以直接与物理网络中的设备进行通信。

(四)其他网络类型

除了上述三种常见的自定义网络类型外,Docker还支持一些其他特殊的网络类型,如ipvlan、host、none等。

  1. ipvlan网络:与macvlan类似,但它是基于IP地址而非MAC地址进行隔离的。ipvlan可以分为l2和l3两种模式,l2模式类似于macvlan,容器与物理网络在同一二层网络;l3模式则实现了三层隔离,容器之间的通信需要通过路由进行。
  2. host网络:使用host网络的容器不会拥有自己独立的网络命名空间,而是直接使用宿主机的网络栈。这意味着容器可以直接使用宿主机的IP地址和端口,通信效率高,但缺乏网络隔离性。
  3. none网络:使用none网络的容器没有任何网络配置,完全与外部网络隔离,适用于一些不需要网络通信的场景。

三、Docker自定义网络的核心功能

Docker自定义网络具备多种核心功能,这些功能使得容器的网络通信更加灵活、安全和高效。

(一)网络隔离

网络隔离是Docker自定义网络的重要功能之一,它能够保证不同网络中的容器无法直接通信,从而提高系统的安全性。

  1. 实现原理
    Docker通过网络命名空间实现网络隔离。每个自定义网络都对应一个独立的网络命名空间,连接到不同网络的容器处于不同的命名空间中,它们之间的网络资源相互隔离,无法直接进行通信。只有当容器被连接到同一个网络时,它们才能通过该网络进行通信。

  2. 应用场景
    在实际应用中,网络隔离可以用于将不同的应用服务隔离开来。例如,在一个电商系统中,可以将前端服务、后端服务、数据库服务分别放置在不同的自定义网络中。前端服务网络只能与后端服务网络通信,后端服务网络只能与数据库服务网络通信,这样可以防止恶意攻击从前端直接渗透到数据库,提高系统的安全性。

(二)DNS解析

自定义网络内置了完善的DNS解析功能,使得容器之间可以通过容器名称进行通信,无需记住复杂的IP地址,极大地简化了容器之间的通信配置。

  1. 实现机制
    在自定义网络中,Docker会自动创建一个DNS服务器,该服务器负责维护容器名称与IP地址的映射关系。当容器连接到自定义网络时,Docker会将容器的名称和IP地址注册到DNS服务器中。当一个容器要与另一个容器通信时,只需使用目标容器的名称,DNS服务器会自动将其解析为对应的IP地址。

  2. 操作示例
    在my-bridge-network网络中启动两个容器:

docker run -d --name web1 --network my-bridge-network nginx
docker run -d --name web2 --network my-bridge-network nginx

在web1容器中,可以通过web2的名称ping通web2容器:

docker exec -it web1 ping web2

此时,DNS服务器会将web2解析为其对应的IP地址,从而实现通信。

(三)端口映射

端口映射功能可以实现容器与外部网络的通信,它允许将容器内部的端口映射到宿主机的端口上,使得外部网络可以通过宿主机的IP地址和映射的端口访问容器中的服务。

  1. 实现方式
    在启动容器时,可以使用-p参数指定端口映射规则。-p参数的格式为“宿主机端口:容器端口”。例如,将容器的80端口映射到宿主机的8080端口:
docker run -d --name web --network my-bridge-network -p 8080:80 nginx

此时,外部网络可以通过访问宿主机的8080端口来访问web容器中的nginx服务。

  1. 高级用法
    还可以指定宿主机的IP地址进行端口映射,例如只允许通过宿主机的192.168.1.100IP地址访问容器的80端口:
docker run -d --name web --network my-bridge-network -p 192.168.1.100:8080:80 nginx

此外,还可以使用-P参数随机映射容器暴露的端口,Docker会自动将容器中暴露的端口映射到宿主机上的随机端口。

(四)网络别名

网络别名允许为容器在网络中设置一个或多个别名,其他容器可以通过这些别名访问该容器,增加了通信的灵活性。

  1. 操作示例
    在启动容器时,可以使用--network-alias参数为容器设置网络别名:
docker run -d --name app --network my-bridge-network --network-alias app1 --network-alias app2 nginx

此时,在同一网络中的其他容器可以通过app1或app2别名访问app容器。

  1. 应用场景
    网络别名在服务发现和负载均衡中非常有用。例如,当多个容器提供相同的服务时,可以为它们设置相同的网络别名,其他容器通过该别名访问服务时,Docker的DNS服务器会自动进行负载均衡,将请求分发到不同的容器上。

四、Docker自定义网络的配置

Docker自定义网络的配置非常灵活,用户可以根据实际需求设置各种网络参数,如IP地址范围、网关、DNS服务器等。

(一)IP地址范围的设置

在创建自定义网络时,可以指定网络的IP地址范围,确保容器分配到的IP地址在预期的网段内。

  1. 操作示例
    创建一个bridge网络,并指定IP地址范围为192.168.10.0/24:
docker network create --driver bridge --subnet 192.168.10.0/24 my-network

其中,--subnet参数用于指定IP地址范围。

  1. 子网划分
    如果需要将一个大的IP地址范围划分为多个子网,可以在创建网络时指定多个--subnet参数。例如:
docker network create --driver bridge --subnet 192.168.10.0/24 --subnet 192.168.20.0/24 my-multi-subnet-network

(二)网关的配置

网关是连接不同网络的设备,在Docker自定义网络中,可以为网络配置网关,使得容器能够与外部网络进行通信。

  1. 操作示例
    创建一个bridge网络,并指定网关为192.168.10.1:
docker network create --driver bridge --subnet 192.168.10.0/24 --gateway 192.168.10.1 my-gateway-network

其中,--gateway参数用于指定网关的IP地址。

  1. 多个网关
    对于具有多个子网的网络,可以为每个子网配置不同的网关。例如:
docker network create --driver bridge \
  --subnet 192.168.10.0/24 --gateway 192.168.10.1 \
  --subnet 192.168.20.0/24 --gateway 192.168.20.1 \
  my-multi-gateway-network

(三)DNS服务器的指定

在自定义网络中,可以指定DNS服务器,确保容器能够正确解析域名。

  1. 操作示例
    创建一个bridge网络,并指定DNS服务器为8.8.8.8和8.8.4.4:
docker network create --driver bridge --dns 8.8.8.8 --dns 8.8.4.4 my-dns-network

其中,--dns参数用于指定DNS服务器的IP地址。

  1. 容器级别的DNS配置
    除了在网络级别指定DNS服务器外,还可以在启动容器时为单个容器指定DNS服务器,容器级别的配置会覆盖网络级别的配置。例如:
docker run -d --name dns-test --network my-dns-network --dns 114.114.114.114 nginx

(四)其他配置选项

除了上述配置选项外,Docker自定义网络还有一些其他的配置选项,如MTU(最大传输单元) 设置等。

  1. MTU设置
    可以通过--opt com.docker.network.driver.mtu=值参数设置网络的MTU。例如,将网络的MTU设置为1450:
docker network create --driver bridge --opt com.docker.network.driver.mtu=1450 my-mtu-network

五、Docker自定义网络的管理和监控

对Docker自定义网络进行有效的管理和监控,有助于确保网络的正常运行和故障排查。

(一)网络的查看

可以使用docker network ls命令查看所有的Docker网络,包括默认网络和自定义网络。例如:

docker network ls

输出结果会显示网络的ID、名称、驱动类型和作用域等信息。

要查看某个具体网络的详细信息,可以使用docker network inspect命令。例如,查看my-bridge-network网络的详细信息:

docker network inspect my-bridge-network

该命令会输出网络的配置信息、连接的容器信息等详细内容。

(二)网络的删除

当不再需要某个自定义网络时,可以使用docker network rm命令将其删除。例如,删除my-bridge-network网络:

docker network rm my-bridge-network

需要注意的是,删除网络之前,必须确保该网络中没有连接任何容器,否则删除操作会失败。可以使用docker network disconnect命令将容器从网络中断开连接后,再删除网络。

(三)容器的连接和断开

  1. 连接容器到网络
    可以使用docker network connect命令将一个运行中的容器连接到某个网络。例如,将container1容器连接到my-bridge-network网络:
docker network connect my-bridge-network container1

也可以在启动容器时,使用--network参数将其直接连接到指定网络。

  1. 断开容器与网络的连接
    使用docker network disconnect命令可以将容器从网络中断开连接。例如,将container1容器从my-bridge-network网络中断开:
docker network disconnect my-bridge-network container1

(四)网络监控

  1. 查看容器之间的通信情况
    可以使用docker network inspect命令查看网络中容器之间的连接情况,了解容器的IP地址、MAC地址等信息,从而判断容器之间是否能够正常通信。

  2. 监控网络流量
    可以使用一些第三方工具来监控Docker网络的流量,如iftop、tcpdump等。例如,使用tcpdump监控宿主机上与my-bridge-network网络相关的网络流量:

tcpdump -i br-my-bridge-network

其中,br-my-bridge-network是my-bridge-network网络对应的虚拟网桥接口名称。

  1. 使用Docker stats命令
    docker stats命令可以查看容器的资源使用情况,包括网络I/O等信息。例如:
docker stats

通过该命令可以了解容器的网络传输速率、累计传输数据量等信息,有助于判断网络是否存在异常。

六、Docker自定义网络的进阶实践

在实际应用中,Docker自定义网络还有一些进阶的实践技巧,能够满足更复杂的网络需求。

(一)网络叠加与跨网络通信

在一些复杂的应用场景中,可能需要多个网络叠加,实现不同网络之间的通信。Docker允许容器连接到多个网络,从而实现跨网络通信。

  1. 操作示例
    创建两个bridge网络:
docker network create --driver bridge network1
docker network create --driver bridge network2

启动一个容器,并将其同时连接到network1和network2网络:

docker run -d --name multi-net-container --network network1 nginx
docker network connect network2 multi-net-container

此时,multi-net-container容器可以与network1和network2网络中的其他容器进行通信,实现了跨网络通信。

  1. 路由配置
    当需要在不同的网络之间进行通信时,可能需要配置路由规则。可以在宿主机上使用ip route命令添加路由,使得不同网络之间能够相互访问。例如,要使network1(192.168.10.0/24)和network2(192.168.20.0/24)之间能够通信,可以在宿主机上添加以下路由:
ip route add 192.168.20.0/24 via 192.168.10.1
ip route add 192.168.10.0/24 via 192.168.20.1

其中,192.168.10.1和192.168.20.1分别是network1和network2网络的网关。

(二)使用网络插件扩展功能

Docker支持通过网络插件扩展网络功能,这些插件可以提供更丰富的网络特性,如高级负载均衡、网络加密、流量控制等。

  1. 网络插件的安装和使用
    以Calico插件为例,它是一个开源的网络和网络安全解决方案,支持Docker等容器平台。安装Calico插件的步骤如下:
  • 首先,需要安装Calico的相关组件,可以通过官方提供的脚本进行安装。
  • 安装完成后,创建一个使用Calico驱动的网络:
docker network create --driver calico my-calico-network
  • 启动容器并连接到该网络,即可使用Calico提供的网络功能。
  1. 常见的网络插件
    除了Calico外,还有许多其他优秀的Docker网络插件,如Flannel、Weave Net等。Flannel是一个简单易用的网络插件,主要用于实现跨主机容器的网络通信;Weave Net则提供了自动发现、加密通信等功能。

(三)网络安全策略

为了提高Docker自定义网络的安全性,可以配置网络安全策略,控制容器之间的通信。

  1. 使用iptables规则
    Docker会自动生成一些iptables规则来管理容器的网络访问,但用户也可以手动添加iptables规则来增强网络安全。例如,禁止某个容器访问外部网络:
iptables -A INPUT -s 192.168.10.10 -j DROP

其中,192.168.10.10是容器的IP地址。

  1. 使用Docker的网络隔离功能
    通过创建不同的自定义网络,并合理配置容器的网络连接,可以实现网络隔离,限制容器之间的通信。例如,只允许前端服务网络的容器访问后端服务网络的容器,而不允许后端服务网络的容器访问前端服务网络的容器。

  2. 使用第三方安全工具
    还可以使用一些第三方安全工具来增强Docker网络的安全性,如Aqua Security、Prisma Cloud等,这些工具可以提供更全面的网络安全防护,包括漏洞扫描、入侵检测等功能。

七、Docker自定义网络案例解析

通过实际案例可以更好地理解Docker自定义网络的应用。下面将介绍两个常见的案例。

(一)微服务架构中的网络配置

在微服务架构中,应用被拆分为多个独立的微服务,每个微服务运行在一个或多个容器中。这些微服务之间需要进行通信,同时也需要与外部客户端进行通信。

  1. 网络规划
  • 创建一个前端服务网络(frontend-network),用于部署前端微服务容器。
  • 创建一个后端服务网络(backend-network),用于部署后端微服务容器。
  • 创建一个数据库网络(db-network),用于部署数据库容器。
  • 前端服务网络与后端服务网络之间允许通信,后端服务网络与数据库网络之间允许通信,前端服务网络与数据库网络之间禁止通信。
  1. 操作步骤
  • 创建网络:
docker network create --driver bridge frontend-network
docker network create --driver bridge backend-network
docker network create --driver bridge db-network
  • 启动数据库容器并连接到db-network网络:
docker run -d --name db --network db-network -e MYSQL_ROOT_PASSWORD=123456 mysql
  • 启动后端服务容器,连接到backend-network和db-network网络:
docker run -d --name backend --network backend-network mysql
docker network connect db-network backend
  • 启动前端服务容器,连接到frontend-network和backend-network网络:
docker run -d --name frontend --network frontend-network -p 80:80 nginx
docker network connect backend-network frontend
  • 此时,前端服务可以通过backend容器的名称访问后端服务,后端服务可以通过db容器的名称访问数据库,实现了微服务之间的正常通信,同时也保证了网络的隔离性。

(二)跨主机容器通信案例

在分布式系统中,容器可能分布在不同的宿主机上,需要实现跨主机通信。下面以overlay网络为例,介绍跨主机容器通信的配置。

  1. 环境准备
  • 两台宿主机,分别为host1(IP:192.168.1.100)和host2(IP:192.168.1.101)。
  • 在host1上启动Consul容器作为键值存储服务:
docker run -d -p 8500:8500 --name consul progrium/consul -server -bootstrap
  • 在host1和host2上配置Docker守护进程,连接到Consul:
    在host1上编辑/etc/docker/daemon.json:
{
  "cluster-store": "consul://192.168.1.100:8500",
  "cluster-advertise": "192.168.1.100:2376"
}

在host2上编辑/etc/docker/daemon.json:

{
  "cluster-store": "consul://192.168.1.100:8500",
  "cluster-advertise": "192.168.1.101:2376"
}

重启两台宿主机的Docker服务:

systemctl restart docker
  1. 创建overlay网络
    在host1上创建一个overlay网络:
docker network create --driver overlay cross-host-network

此时,在host2上也可以看到该网络。

  1. 启动容器并测试通信
    在host1上启动一个容器并连接到cross-host-network网络:
docker run -d --name host1-container --network cross-host-network nginx

在host2上启动一个容器并连接到cross-host-network网络:

docker run -d --name host2-container --network cross-host-network nginx

在host1-container容器中ping host2-container容器:

docker exec -it host1-container ping host2-container

如果能够ping通,说明跨主机容器通信配置成功。

八、总结

Docker自定义网络具有多种类型,包括bridge、overlay、macvlan等,每种类型都有其独特的特点和适用场景。

自定义网络具备网络隔离、DNS解析、端口映射、网络别名等核心功能,能够满足不同的网络需求。

可以对自定义网络进行灵活的配置,如设置IP地址范围、网关、DNS服务器等。

有效的网络管理和监控有助于确保网络的正常运行,包括网络的查看、删除、容器的连接和断开以及网络流量的监控等。

在进阶实践中,可以通过网络叠加、使用网络插件、配置网络安全策略等方式扩展网络功能和提高安全性。

到此这篇关于Docker自定义网络的实现步骤的文章就介绍到这了,更多相关Docker自定义网络内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker-compose常见的参数命令详解

    docker-compose常见的参数命令详解

    Compose 是用于定义和运行多容器 Docker 应用程序的工具,下面这篇文章主要给大家介绍了关于docker-compose常见参数命令的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 教你如何将应用从docker-compose迁移到k8s中

    教你如何将应用从docker-compose迁移到k8s中

    这篇文章主要介绍了如何将应用从docker-compose迁移到k8s中,本文给大家分享一个专门的迁移工具,可方便地通过docker-compose.yaml自动生成k8s的yaml部署文件,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 一次wsl2+docker无法运行的经历实战记录

    一次wsl2+docker无法运行的经历实战记录

    这篇文章主要介绍了在使用WSL2和Docker Desktop时遇到的错误,并提供了解决方案,错误可能是由于自定义WSL内核导致的,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-05-05
  • Docker实现容器之间通信的多种方式

    Docker实现容器之间通信的多种方式

    在 Docker 中,实现容器之间的通信有多种方式,核心在于网络配置,下面我从 基础原理、常见方式、最佳实践、以及 docker-compose 方式 全面讲解,需要的朋友可以参考下
    2025-06-06
  • 使用Docker部署todo任务管理器的实现

    使用Docker部署todo任务管理器的实现

    本文介绍使用Docker部署Todo任务管理器的全过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-07-07
  • docker-registry使用笔记

    docker-registry使用笔记

    在国内docker-hub是肯定用不了的,不解释:所以最好还是建一个私有的docker-registry,存储一些常用的images方便随时pull
    2016-09-09
  • Docker 部署Datart BI工具完整指南(PostgreSQL 持久化存储)

    Docker 部署Datart BI工具完整指南(PostgreSQL 持久化存储)

    本文档详细介绍如何使用Docker部署Datart数据可视化平台,并使用PostgreSQL作为元数据库实现数据持久化存储,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2026-03-03
  • Centos8.3、docker部署springboot项目实战案例分析

    Centos8.3、docker部署springboot项目实战案例分析

    这篇文章主要介绍了Centos8.3、docker部署springboot项目实战记录,包括docker安装,开启docker远程访问端口的方法及配置idea docker环境的方法,需要的朋友可以参考下
    2021-06-06
  • 浅谈docker避免每次sudo方法

    浅谈docker避免每次sudo方法

    本文主要介绍了docker避免每次sudo方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-11-11
  • docker生命周期管理和镜像管理命令详解

    docker生命周期管理和镜像管理命令详解

    Docker通过容器技术提供了一种轻量级、快速部署和可移植的应用程序运行环境,极大地简化了应用程序的部署和管理过程,提高了开发和运维的效率,这篇文章主要介绍了docker生命周期管理和镜像管理命令,需要的朋友可以参考下
    2023-08-08

最新评论