You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vite本地运行无法通过Docker网络host.docker.internal访问问题

问题描述

两台Ubuntu机器(台式机正常、笔记本异常)的开发环境架构:

  • 前端:本地运行Vite,配置如下:
    server: {
      host: "0.0.0.0",
      port: 3000,
    },
    
  • API:Docker容器部署,Vite可正常与之通信
  • Worker:独立Docker容器(运行Puppeteer),需访问本地Vite实例生成PDF

Docker Compose已配置:

extra_hosts:
  - "host.docker.internal:host-gateway"

异常表现:

  • 笔记本上Vite仅暴露localhost、以太网IP,未绑定docker0的172.*网段;台式机正常绑定所有网络
  • Worker容器可ping通host.docker.internal,但无法访问http://host.docker.internal:3000
  • 已尝试重建Docker镜像、升级Vite,问题未解决
排查与解决方案

1. 确认Vite实际监听地址

执行以下命令检查Vite是否真的绑定了0.0.0.0:

ss -tulpn | grep :3000

如果输出中监听地址是127.0.0.1或特定IP,说明配置被覆盖:

  • 检查.env文件是否存在VITE_SERVER_HOST变量,该变量会覆盖配置文件的server.host
  • 确认Vite启动命令是否带了--host参数(如vite --host 127.0.0.1),手动参数优先级高于配置文件

2. 检查docker0网络与本地访问性

  1. 查看docker0网卡IP:
    ip addr show docker0
    
    通常输出为172.17.0.1/16
  2. 在宿主机测试访问该IP的3000端口:
    curl http://172.17.0.1:3000
    
    若访问失败,说明Vite未监听docker0网段,需回到步骤1排查配置;若能访问,问题出在容器到宿主机的流量拦截

3. 排查防火墙规则

Ubuntu默认防火墙ufw可能阻止了docker0网段的流量:

  1. 查看防火墙状态:
    sudo ufw status
    
  2. 允许docker0网段访问3000端口:
    sudo ufw allow in from 172.17.0.0/16 to any port 3000
    
  3. 临时关闭ufw测试(验证是否为防火墙问题):
    sudo ufw disable
    

4. 修正host.docker.internal映射

容器内host.docker.internal默认映射宿主机的以太网IP,若笔记本以太网接口防火墙拦截,可手动映射到docker0的IP:
修改Docker Compose的extra_hosts:

extra_hosts:
  - "host.docker.internal:172.17.0.1"

重启容器后再次测试访问

5. 检查宿主机路由表

执行以下命令确认docker0路由规则正常:

route -n

若存在阻止容器到宿主机的路由条目,需清理对应规则

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 09:02:42