两台物理机Docker如何直接互通?

通过配置Docker overlay网络或使用第三方网络驱动,可实现两台物理机上Docker容器的直接互通,需确保主机网络可达,并开放所需端口(如VXLAN的4789/UDP),结合服务发现(如etcd/consul)管理容器IP,使跨主机容器能无缝通信。

在Docker的实际应用中,常需实现跨物理机的容器直接通信(如微服务集群部署),以下基于专业实践,详细说明两种主流方案,兼顾安全性与效率,所有操作均基于Linux环境(CentOS/Ubuntu),确保可复现性。

两台物理机Docker如何直接互通?


解决方案核心思路

容器跨主机通信需解决两个问题:

  1. 网络打通:跨物理机的容器IP需能路由。
  2. 服务发现:容器如何感知彼此IP。

方案1:Overlay网络(推荐生产环境使用)

原理:通过VXLAN隧道封装数据包,构建跨主机的虚拟网络层,依赖Docker Swarm(内建KV存储)或外部Consul/Etcd。

步骤详解

环境准备

  • 物理机A:IP 168.1.10,主机名 node1
  • 物理机B:IP 168.1.20,主机名 node2
  • 关闭防火墙:systemctl stop firewalld 或配置允许VXLAN端口(4789/UDP)

步骤1:初始化Docker Swarm集群

# 在node1执行(作为管理节点)
docker swarm init --advertise-addr 192.168.1.10
# 在node2执行(加入集群)
docker swarm join --token <SWARM-TOKEN> 192.168.1.10:2377

步骤2:创建Overlay网络

# 任意节点创建网络
docker network create -d overlay my-overlay-net

步骤3:在跨主机启动容器

# node1启动容器
docker run -d --name web1 --network my-overlay-net nginx
# node2启动容器
docker run -d --name web2 --network my-overlay-net busybox ping web1

验证通信

两台物理机Docker如何直接互通?

# 进入node2的容器web2
docker exec -it web2 ping web1
# 成功输出:PING web1 (10.0.0.2) 56(84) bytes of data.

关键优势

  • 自动DNS服务发现(通过容器名互通)
  • 加密流量支持(--opt encrypted
  • 无需手动管理IP路由

方案2:Macvlan网络(高性能直连)

适用场景:要求容器直接使用物理网络IP,性能接近裸机。

配置步骤

前提:物理交换机需允许混杂模式(Promiscuous Mode)。

步骤1:创建Macvlan网络

# 在两台物理机执行相同命令
docker network create -d macvlan 
  --subnet=192.168.1.0/24 
  --gateway=192.168.1.1 
  -o parent=eth0 
  macvlan-net

步骤2:启动容器并指定IP

# 物理机A启动容器
docker run -d --name db1 --network macvlan-net --ip 192.168.1.101 redis
# 物理机B启动容器
docker run -it --name app1 --network macvlan-net --ip 192.168.1.102 alpine ping 192.168.1.101

通信验证

  • app1中执行 ping 192.168.1.101 应收到回复。

注意事项

两台物理机Docker如何直接互通?

  • 需手动分配IP,避免冲突
  • 容器直接暴露在物理网络,需强化安全策略

避坑指南

  1. 防火墙规则

    • 开放VXLAN端口:4789/UDP(Overlay)
    • 允许ICMP协议(测试)
      iptables -A INPUT -p udp --dport 4789 -j ACCEPT
  2. 服务发现替代方案

    • 若不用Swarm,可用Consul+Docker自定义网络
      docker network create -d overlay --attachable --subnet=10.5.0.0/16 consul-net
  3. 性能调优

    • Overlay网络有~10%带宽损耗,若追求极限性能选Macvlan
    • 避免NAT:使用--ip指定IP减少转发延迟

安全建议

  1. 网络隔离
    • 限制Overlay网络范围:--subnet=172.20.0.0/24
    • 启用TLS加密:docker swarm init --tlsverify
  2. 访问控制
    docker network create --opt com.docker.network.bridge.enable_icc=false isolated-net  # 禁止容器间通信

方案 适用场景 复杂度 性能损耗
Overlay网络 容器集群、云环境 ~10%
Macvlan 低延迟应用、本地物理网络 <1%

生产环境首选Overlay网络(自动化程度高);若网络可控且需极致性能,用Macvlan,避免使用已弃用的--link或手动配置路由等高风险操作。


引用说明

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/36826.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月23日 19:15
下一篇 2025年6月10日 15:39

相关推荐

  • 虚拟机VS物理机,谁更胜一筹?

    虚拟机是通过软件模拟的计算机系统,运行在物理机(真实硬件)之上,物理机提供基础硬件资源(CPU、内存、存储等),由虚拟化软件(Hypervisor)管理和分配,从而允许多个虚拟机共享同一台物理机的资源。

    2025年6月22日
    000
  • 云端VS物理机,哪个更适合你?

    云端服务租用虚拟资源,按需付费,弹性扩展,运维责任转移供应商;物理机是自有实体服务器,固定配置,一次性投入高,需自行运维管理,资源独享性能稳定,前者灵活高效,后者可控性强。

    2025年6月17日
    100
  • 如何将Win7物理机迁移至虚拟机?

    将物理Windows 7系统迁移到虚拟机环境(P2V),需使用专业工具(如VMware Converter)进行转换,此过程涉及创建系统磁盘映像、配置虚拟硬件并解决驱动兼容性问题,最终在虚拟机平台(如VMware、Hyper-V)中运行原系统。

    2025年6月15日
    000
  • 虚拟化后屏幕变模糊怎么办?

    物理机虚拟化后出现分辨率异常,通常因虚拟机未正确安装或更新显示驱动程序(如VMware Tools/VirtualBox Guest Additions)所致,导致无法适配最佳屏幕分辨率,安装对应驱动即可解决。

    2025年6月8日
    100
  • 虚拟机物理内存是什么?

    虚拟机物理内存指宿主机实际物理内存(RAM)中划分给虚拟机使用的部分,是虚拟机运行程序和数据的真实硬件内存资源。

    2025年6月18日
    100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN