Azure VM无法访问Linux VM内Docker容器 求等效VSCode端口转发命令
React应用Docker容器端口转发无法访问排查方案
故障背景
- 已完成React应用Docker容器化封装,所有依赖安装完成,应用可在Linux VM环境正常运行
- 当前容器启动命令:
docker run -p 80:80 react_image - 访问链路:Azure VM -> 部署Docker的Linux VM -> 容器内React应用
- 故障表现:在Azure VM访问
localhost:80无法加载应用,使用VSCode端口转发功能可正常访问 - 需求:实现与VSCode端口转发等效的命令行能力,解决访问不通问题
排查步骤与解决方法
- 优先排查容器内应用监听地址问题
React官方脚手架(CRA、Vite)默认启动的开发服务仅绑定127.0.0.1回环地址,不接受容器外部的请求,这是该类问题最高发的原因:- 若为CRA搭建的项目,修改package.json中的启动脚本为
"start": "HOST=0.0.0.0 react-scripts start" - 若为Vite搭建的项目,修改启动脚本为
"dev": "vite --host 0.0.0.0"
修改后重新构建镜像,再启动容器即可。
- 若为CRA搭建的项目,修改package.json中的启动脚本为
- 验证Docker端口映射生效状态
在Linux VM上执行docker ps,查看对应容器的端口映射列,需显示0.0.0.0:80->80/tcp才代表映射规则正常绑定到所有网卡。如果仅绑定127.0.0.1,需要调整Docker启动参数。 - 放行Linux VM本地防火墙规则
根据Linux VM使用的防火墙组件,放行80端口TCP入站流量:
规则配置完成后,先在Linux VM本地执行# ufw防火墙(Ubuntu默认) sudo ufw allow 80/tcp sudo ufw reload # firewalld防火墙(CentOS/RHEL默认) sudo firewall-cmd --add-port=80/tcp --permanent sudo firewall-cmd --reloadcurl http://localhost:80,确认可以正常返回React应用的HTML内容,证明Linux VM到容器的链路已经通了。 - 检查Azure平台网络规则
确认Azure VM所属的网络安全组(NSG)已经配置入站规则,允许对应源地址访问80端口TCP协议,否则Azure层面会直接拦截流量。 - 等效VSCode端口转发的命令行实现
VSCode端口转发本质是基于SSH隧道实现,直接在Azure VM上执行以下命令即可实现完全一致的效果:
执行后保持SSH会话不中断,在Azure VM上访问ssh -L 80:localhost:80 <Linux VM登录用户名>@<Linux VM内网/公网IP> -Nlocalhost:80即可正常打开React应用。
内容的提问来源于stack exchange,提问作者Naga kiran
相关产品推荐
相关产品推荐

