使用macvlan实现容器的跨主机通信

使用环境:

两台运行docker的服务器

A机器网段:192.168.86.61

B机器网段:192.168.86.62

运行的容器需装有ping指令,

实验参数解释:

复制代码
-d macvlan 指定创建网络驱动类型
--subnet= 指定子网范围
-gateway 指定网关地址
-o parent=eth0 指定宿主机物理接口(父接口)
macvlan_net 创建子网指定其网络名称

实验一:A B机器的容器可以互通,无法与宿主机互通,无法上外网,只能与同vlan中容器通信【一个macvlan只能绑定一个物理接口】

操作步骤一,

A机器操作:

bash 复制代码
## 创建一个新的网络,指定其网络驱动类型 ,指定子网和网关,指定父接口,并赋名
docker network create -d macvlan --subnet=172.18.1.0/24 --gateway=172.18.1.1 -o parent=eth0 macvlan_net  
## 启动一个可用ping命令的容器,指定网络模式,指定静态ip
docker run -itd --name test-1 --net macvlan_net --ip=172.18.1.10 centos:7

B机器操作:

bash 复制代码
docker network create -d macvlan --subnet=172.18.1.0/24 --gateway=172.18.1.1 -o parent=eth0 macvlan_net 

docker run -itd --name test-1 --net macvlan_net --ip=172.18.1.10 centos:7

测试A B

复制代码
A机器操作
docker exec -it test-1 ping baidu.com
docker exec -it test-1 ping 172.18.1.20
docker exec -it test-1 ping 192.168.86.62
B机器操作
docker exec -it test-2 ping 172.18.1.10
docker exec -it test-2 ping 192.168.86.61
docker exec -it test-2 ping baidu.com

实验结果:可以看到两个容器之间可以互相通信。但无法和外网及宿主机通信。

bash 复制代码
[root@mongodb-1 ~]# docker exec -it test-1 ping baidu.com
PING baidu.com (182.61.201.211) 56(84) bytes of data.
From e450a1930ae1 (172.18.1.10) icmp_seq=1 Destination Host Unreachable
From e450a1930ae1 (172.18.1.10) icmp_seq=2 Destination Host Unreachable
From e450a1930ae1 (172.18.1.10) icmp_seq=3 Destination Host Unreachable
------------------------------------------------
[root@mongodb-1 ~]# docker exec -it test-1 ping 172.18.1.20
PING 172.18.1.20 (172.18.1.20) 56(84) bytes of data.
64 bytes from 172.18.1.20: icmp_seq=1 ttl=64 time=2.24 ms
64 bytes from 172.18.1.20: icmp_seq=2 ttl=64 time=1.91 ms
------------------------------------------------
[root@mongodb-1 ~]# docker exec -it test-1 ping 192.168.86.62
PING 192.168.86.62 (192.168.86.62) 56(84) bytes of data.
From 172.18.1.10 icmp_seq=1 Destination Host Unreachable
From 172.18.1.10 icmp_seq=2 Destination Host Unreachable

清理环境

复制代码
docker rm -f test-1
docker rm -f test-2
docker network rm macvlan_net

实验二,容器和同网段其他设备互通和宿主机不互通

设置macvlan子网和宿主机完全同网段,容器和同网段其他设备互通,但是无法和宿主机互通(走的是本地的路由器

A机器操作

bash 复制代码
docker network create -d macvlan --subnet=192.168.86.0/24 --gateway=192.168.86.2 -o parent=eth0 macvlan_host_net

docker run -itd --name tset-1 --net macvlan_host_net --ip=192.168.86.110 centos:7

B机器操作

bash 复制代码
docker network create -d macvlan --subnet=192.168.86.0/24 --gateway=192.168.86.2 -o parent=eth0 macvlan_host_net

docker run -itd --name tset-1 --net macvlan_host_net --ip=192.168.86.111 centos:7

测试

复制代码
A机器操作
docker exec -it test-1 ping baidu.com
docker exec -it test-1 ping 192.168.86.111
docker exec -it test-1 ping 192.168.86.62
B机器操作
docker exec -it test-2 ping 192.168.86.110
docker exec -it test-2 ping 192.168.86.61
docker exec -it test-2 ping baidu.com
相关推荐
程序员老赵10 分钟前
Docker 部署 XWiki:轻松搭建企业知识库与协作 Wiki
前端·docker·开源
I'mChloe38 分钟前
飞牛NAS部署flatnotes实战:Docker、8080端口、Markdown笔记与固定地址访问
笔记·docker·容器
Flynn Liang6 小时前
5分钟跑通MQTT:EMQX Docker部署+MQTTX联调(2026最新版,含踩坑)
物联网·mqtt·docker·iot·emqx
木雷坞8 小时前
Docker Compose端口映射排查:用port和inspect定位网页访问失败
运维·docker·容器
码间留白19 小时前
手把手把 GitHub 推上阿里云 ECS:Actions CI/CD 全链路避坑实录(折腾好几天,到 2 分钟见绿)
运维·阿里云·ci/cd·docker·devops·github actions
Vex2une20 小时前
Docker Desktop WSL2后端:2026年性能调优与避坑实战指南
windows·docker·desktop·gpu容器·容器开发·virtiofs·buildkit
程序员老赵20 小时前
Docker 部署青龙面板:轻松搭建定时任务管理平台
前端·docker·开源
TTATTC21 小时前
为什么单会话聊天做不好复杂工程?Claude Code 创作者的并发 Worktree 与记忆闭环实践
docker·开源
TTATTC21 小时前
状态机驱动长事务,还是 DAG 编排高并发?高可靠业务流程引擎的双核架构设计
docker·开源
殷忆枫21 小时前
告别依赖地狱!在 Ubuntu 上用 Docker 极速部署 Home Assistant 与 MQTT,并接入 Siri 与嵌入式 C 终端
linux·ubuntu·docker