Docker macvlan
默认情况下docker使用bridge网络,这是一个私有网络,只能在host和container之间互通,如果发布服务,需要使用端口映射的方式来解决,比如一个nginx容器要想对外提供服务则在容器启动时指定参数-p 80:80,然后使用host主机的ip加端口即可访问容器。这在大部分场景下都够用了,但是总有一些需求无法满足,比如如果多个容器都需要使用80端口,或者只使用ip通信的网络应用,macvlan可以做到。
macvlan
macvlan是可以虚拟mac地址,单独的macvlan存在意义不大,结合docker给每一个容器都虚拟一个mac地址,这样每个容器在局域网中都相当于一个独立的主机。
创建
docker network create -d macvlan \
--subnet=192.168.10.0/24 \
--ip-range=192.168.10.32/28 \
--gateway=192.168.10.1 \
--aux-address="my-router=192.168.32.33" \
-o parent=eth0 macnet
- subnet:子网
- ip-range:docker自动分配ip范围,防止和局域网内其他主机重复
- gateway:网关
- aux-address:docker分配ip时排除的ip(这个ip有其他用途)
- parent:父接口,也就是host主机的物理网卡
以上参数强烈建议都指定,可以减少不必要的麻烦
创建容器
docker run -d --net=macnet --ip=192.168.10.34 --name nginx nginx
- --net:指定关联上面创建的macvlan网络
- --ip:指定ip,可以不指定(让docker自动分配),也可以去容器里修改
经过上面操作运行了一个nginx容器,此容器拥有一个虚拟的mac地址,在网内相当于一个真实的主机,任何网内的其他主机(非host)都可以通过为其指定的ip访问该容器。
如果使用相同的方法运行多个nginx容器,并不需要每个容器指定不同的端口,因为网络namespace是隔离的。
但是目前有个问题:host和container是无法互通的,因为是macvlan的原因,同一个网口的流量是无法回传的,除非在外部有一个支持VEPA或者VN-Link的交换机。
以上命令中的网络接口、ip请根据实际情况进行调整
https://docs.docker.com/network/macvlan/
标签:
Docker网络
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2020-12-07 数据类型、扩展、面试题讲解
2020-12-07 标识符和关键字