You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何将Docker虚拟网卡与ZeroTier虚拟网卡进行路由/桥接?

用ZeroTier桥接Windows Docker容器到虚拟局域网的完整指南

我来一步步帮你搞定用ZeroTier把Windows上的Docker容器接入虚拟局域网的事儿——毕竟Windows上Docker依赖Hyper-V的机制,确实得绕几个弯子才能让外部访问到容器。

一、先搞定ZeroTier的基础配置:让Hyper-V虚拟机连上虚拟网

所有Docker容器都跑在Hyper-V的专属虚拟机里,所以得先让这个虚拟机和ZeroTier虚拟网络打通:

  • 1. Windows主机先装ZeroTier
    下载ZeroTier客户端安装好,加入你的虚拟局域网(记好你的网络ID,后面全靠它)。安装完成后,在Windows的「网络适配器」里能看到ZeroTier的网卡,顺便记一下它的IP(一般是192.168.192.x这类,取决于你的ZeroTier网络配置)。

  • 2. 给Hyper-V里的Docker虚拟机装ZeroTier
    这个虚拟机是容器的“大本营”,必须让它也加入ZeroTier:

    1. 打开Hyper-V管理器,找到Docker的虚拟机(通常叫DockerDesktopVM,旧版本可能是MobyLinuxVM),右键点「连接」,进入虚拟机的控制台。
    2. 登录进去——如果没改密码,默认用户是root,也可以用docker run -it --privileged --pid=host justincormack/nsenter1直接进入主机的命名空间。
    3. 在虚拟机里执行安装命令:
      curl -s https://install.zerotier.com | bash
      
    4. 加入你的ZeroTier网络,把下面的「你的网络ID」换成你自己的:
      zerotier-cli join 你的网络ID
      
    5. 打开ZeroTier的管理后台,允许这个虚拟机的设备加入网络,最好给它分配一个固定的虚拟IP(比如10.147.17.100),后面访问起来方便。

二、配置Docker容器的网络:两种方式任选

现在要让容器能通过ZeroTier网卡对外暴露服务,有两种实用方案,按需选:

方式一:主机网络模式(简单粗暴,适合快速测试)

如果你的容器不需要网络隔离,可以直接让容器共享Hyper-V虚拟机的网络栈,包括ZeroTier网卡。启动容器时加--net=host参数就行:

docker run -d --net=host nginx

这样外部设备通过ZeroTier网络访问Hyper-V虚拟机的固定IP(比如10.147.17.100:80),就能直接打开容器里的Nginx了。

方式二:自定义网桥(灵活隔离,适合多容器场景)

如果需要给不同容器分配独立IP,或者做网络隔离,就自定义一个网桥并桥接到ZeroTier网卡:

  1. 在Hyper-V虚拟机里创建自定义Docker网桥:
    docker network create --driver bridge --subnet 172.20.0.0/16 --gateway 172.20.0.1 zerotier-bridge
    
  2. 找到ZeroTier的网卡名(一般是ztxxxxxx格式,用ip link show命令就能看到),然后用brctl工具桥接(如果没装brctl,先执行apt-get install bridge-utils安装):
    brctl addbr br-zerotier
    brctl addif br-zerotier ztxxxxxx
    ip link set br-zerotier up
    
  3. 启动容器时指定这个自定义网络,还能手动分配IP:
    docker run -d --net=zerotier-bridge --ip 172.20.0.10 nginx
    
  4. 最后去ZeroTier管理后台,把容器的子网(172.20.0.0/16)添加到路由里,目标设置为Hyper-V虚拟机的固定ZeroTier IP。这样外部设备就能直接访问172.20.0.10:80了。

三、验证配置是否生效

  • 用ZeroTier网络里的其他设备(比如手机、另一台电脑)ping Hyper-V虚拟机的固定ZeroTier IP,能通就说明ZeroTier连接正常。
  • 访问容器的服务端口(比如刚才的80端口),能正常打开页面就说明配置成功了!

几个要注意的坑

  • 别忘给Hyper-V虚拟机的防火墙开端口!比如用Nginx的话,要允许80端口的入站规则。
  • 如果ZeroTier网络设置了ACL(访问控制列表),要确保允许容器子网和外部设备的通信。
  • 重启Hyper-V虚拟机后,ZeroTier服务会自动启动,但桥接配置可能会失效,可以把桥接命令写到/etc/rc.local里,让它开机自动执行。

内容的提问来源于stack exchange,提问作者Stephen Eckels

火山引擎 最新活动