问题描述:
在容器内执行 arp -n
命令,发现无法获取正确的 ARP 表信息,所有 MAC 地址都是同一个。
原因分析:
容器内部网络是隔离的,与宿主机器和外网之间需要经过 NAT 转换。在这个转换过程中,会改变 ARP 表信息。
解决方法:
在容器内使用
ip neigh show
命令查看邻居表信息,可以获取到正确的 MAC 地址。使用
docker exec
命令进入宿主机器,在宿主机上执行arp -n
命令即可获取正确的 ARP 表信息。如果需要在容器内获取正确的 ARP 表信息,可以通过设置 Docker 网络模式为 host 模式来实现。这样容器就直接使用宿主机的网络,并且不需要进行 NAT 转换。例如:
docker run --net=host ...
参考资料: