Macvlan模式下Nginx容器可连通但浏览器无法访问求助
先确认宿主与容器的通信限制
很多系统默认会阻止宿主和macvlan子接口的直接通信,先在宿主机器ping容器IP试试,如果宿主也ping不通,基本是这个问题。解决办法是在宿主上创建一个macvlan桥接子接口:ip link add macvlan-shim link eth0 type macvlan mode bridge ip addr add 192.168.x.y/24 dev macvlan-shim ip link set macvlan-shim up把
eth0换成你的物理网卡名称,192.168.x.y填和容器同网段且未被占用的IP。检查Nginx的监听地址
进入容器执行netstat -tulpn | grep nginx,看Nginx是不是监听在0.0.0.0:80。如果只监听127.0.0.1:80,外部肯定访问不了,得修改Nginx配置里的listen指令,改成listen 80;或者listen 0.0.0.0:80;,然后重启Nginx。排查防火墙/安全组
不管是宿主的防火墙(比如ufw、firewalld),还是所在网络的安全组,都要确认80端口是开放的。可以先临时关闭宿主防火墙测试,比如Ubuntu上执行ufw disable,如果能访问了,再重新配置允许80端口的规则。核对macvlan的网络配置
检查macvlan的网段、网关是不是和物理网络完全一致,子网掩码也不能错。比如物理网络是192.168.1.0/24,网关192.168.1.1,macvlan就不能设成192.168.2.0/24这种不匹配的网段。换设备测试访问
别只在宿主机器上试,用同一网段的其他电脑或手机访问容器IP试试。有些系统的本地回环和macvlan有隔离,宿主访问不了但其他设备能访问的话,就是宿主侧的隔离问题,用第一个方法的桥接子接口就能解决。
内容的提问来源于stack exchange,提问作者Ivaylo

