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

Docker环境下Vue 2 Vite无法识别子域名foo.example.st的代理问题

问题解决步骤

1. 修正API请求路径,让Vite代理生效

你当前的API请求使用了完整外部域名http://foo.example.st/api/auth/...,这会直接绕过Vite的代理配置,导致请求在容器内部发起时无法解析到正确的Laravel服务。

将请求改为相对路径,让请求走Vite代理:

getTenantInfo() {
    return api.get('/api/auth/...')
}

2. 调整Vite代理的Target为Docker内部服务名

Docker容器之间通过服务名(即docker-compose.yml中services节点下定义的名称)互相访问,而非外部域名。假设你的Laravel应用在docker-compose.yml中的服务名为laravel-api,修改vite.config.js:

server: {
    proxy: {
      '/api': {
        // 替换为Laravel服务的名称,若Laravel容器内部用了非80端口,需加上端口(比如http://laravel-api:9000)
        target: 'http://laravel-api',
        changeOrigin: true,
        // 如果Laravel的接口路径本身不带/api,取消注释下面一行;带/api则保留注释
        // rewrite: (path) => path.replace(/^\/api/, ''),
      },
    }
  },

3. 确保两个容器在同一个Docker网络

在docker-compose.yml中,为Vue应用和Laravel应用配置同一个自定义bridge网络,保证容器间能互相通信:

Vue应用的docker-compose.yml片段:

services:
  front:
    # 其他镜像、端口等配置
    networks:
      - app-network

networks:
  app-network:
    external: true # 若该网络已由Laravel的docker-compose创建,添加此配置;否则移除,让系统自动创建

Laravel应用的docker-compose.yml片段:

services:
  laravel-api:
    # 其他镜像、端口等配置
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

4. 验证Laravel服务在容器内部的可访问性

进入Vue应用的容器,测试能否连通Laravel服务:

# 测试网络连通性
docker exec -it [vue容器名称] ping laravel-api

# 测试接口是否可用
docker exec -it [vue容器名称] curl http://laravel-api/api/auth/...

5. 额外注意:Laravel的Nginx配置(若适用)

如果Laravel应用前端用了Nginx容器做反向代理,需确保Nginx配置允许来自Docker网络的请求,并正确处理Host头:

server {
    listen 80;
    server_name foo.example.st;
    # 允许Docker内部网段的请求
    allow 172.0.0.0/8;
    deny all;
    # 其他路由、根目录等配置
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:33:17