如何让Windows 10上的Linux容器与主机处于同一局域网?
解决Windows 10上Linux容器与主机同局域网的问题
我之前也在Windows 10上折腾过Docker网络,要让容器和主机、局域网设备处于同一子网确实比Linux环境麻烦不少,尤其是你需要用nmap扫描MAC地址的场景——毕竟MAC扫描必须在同一子网内才能生效。结合你试过的方法,给你两个可行的解决方案,分别对应不同的Docker后端:
方案一:升级到WSL2后端的Docker(推荐)
你的Docker版本是18.03.1-ce,比较老旧,现在Docker Desktop默认使用WSL2后端,这种方式下配置桥接网络会简单很多:
- 升级Docker Desktop:下载最新版Docker Desktop并安装,安装过程中选择WSL2作为后端(如果之前用的是Hyper-V,安装后可以在设置里切换)。
- 配置WSL2桥接网络:
- 打开PowerShell,执行
wsl --shutdown关闭所有WSL实例; - 打开Hyper-V管理器,找到名为
WSL的虚拟交换机,右键选择“属性”,切换到“外部网络”,绑定到你主机正在使用的物理网卡(比如以太网或Wi-Fi); - 重新启动WSL,进入WSL终端后用
ip addr检查IP,确认它和主机处于同一局域网子网;
- 打开PowerShell,执行
- 运行容器:启动容器时加上
--net host参数,比如:
此时容器会直接共享WSL2的网络栈,IP和WSL2一致,属于你的局域网子网,nmap就能正常扫描MAC地址了。docker run --net host -it ubuntu:latest
方案二:针对Hyper-V后端的老版本Docker
如果你暂时不想升级Docker,基于Hyper-V后端也可以实现:
- 创建Hyper-V外部虚拟交换机:
- 打开Hyper-V管理器,点击左侧的“虚拟交换机管理器”;
- 选择“新建虚拟交换机”,类型选“外部”,点击“创建虚拟交换机”;
- 给交换机命名(比如
Docker-Bridge),绑定到主机的物理网卡,取消勾选“允许管理操作系统共享此网络适配器”(避免网卡冲突);
- 配置Docker使用外部交换机:
- 右键托盘里的Docker图标,选择“Settings”;
- 切换到“Network”选项卡,在“Docker subnet”部分选择你刚创建的
Docker-Bridge交换机,保存设置并重启Docker;
- 运行容器:现在启动的容器会自动获取你局域网内的IP地址,你可以用
docker inspect <容器ID>查看容器的IP,确认它和主机在同一子网,之后就能正常使用nmap扫描了。
解释你之前遇到的问题
你用--net host时看到的192.168.65.3其实是Docker Hyper-V虚拟机的NAT网络IP,不是主机的局域网IP——老版本Docker在Windows上是基于Hyper-V虚拟机运行的,--net host只是让容器共享虚拟机的网络,而非主机的物理网络,所以你修改容器内的eth0静态IP会导致网络中断,因为虚拟机本身没有权限直接使用主机的局域网IP。
内容的提问来源于stack exchange,提问作者Timmy Lin
相关产品推荐
相关产品推荐

