Laravel Sail(Docker)下无法访问多个.test域名的问题排查
Laravel Sail 自定义域名无法访问问题解决
问题现象
用Laravel+Sail(Docker)部署两个本地应用,第一个能通过http://vantagemetalmap.test、localhost:80及Vite页面正常访问;但第二个应用只能通过localhost:8081/8082端口访问,http://thevillagex.test无法打开,Vite服务器页面能在localhost:5175正常显示。
核心问题
- Hosts文件配置的域名与实际访问域名不匹配:Hosts里写的是
thevillage.x,但要访问的是thevillagex.test - 自定义域名解析到127.0.0.1后,没有对应到正确的容器端口转发规则
解决步骤
1. 修正Hosts文件
打开/etc/hosts,把错误的域名替换成正确的:
## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost # Docker Applications 127.0.0.1 vantagemetalmap.test 127.0.0.1 thevillagex.test # 替换原来的thevillage.x
修改后刷新MacOS DNS缓存:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
2. 确认Docker端口映射
检查第二个项目的docker-compose.yml,确保端口映射和.env配置一致:.env里的APP_PORT=8081对应docker-compose.yml中的:
ports: - '${APP_PORT:-8081}:80' # 宿主机8081 → 容器80 - '${VITE_PORT:-5175}:${VITE_PORT:-5173}'
如果配置没问题,跳过此步骤;如果不一致,修正后保存。
3. 实现无端口访问(可选)
如果不想带端口访问thevillagex.test,需要用Nginx做反向代理,把域名请求转发到8081端口:
- 创建Nginx配置文件(以brew安装的Nginx为例):
/usr/local/etc/nginx/servers/thevillagex.test.conf
server { listen 80; server_name thevillagex.test; location / { proxy_pass http://localhost:8081; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
- 重启Nginx:
brew services restart nginx
4. 调整Vite热更新配置
修改vite.config.js,确保HMR配置和自定义域名匹配:
import { defineConfig } from 'vite'; import laravel from 'laravel-vite-plugin'; export default defineConfig({ server: { host: '0.0.0.0', port: 5175, hmr: { host: 'thevillagex.test', port: 5175, protocol: 'ws' }, }, plugins: [ laravel({ input: ['resources/css/app.css', 'resources/js/app.js'], refresh: true, }), ], });
重启Vite服务:
sail npm run dev
5. 重启Docker容器
确保所有配置生效,重启第二个项目的容器:
sail down sail up -d
内容的提问来源于stack exchange,提问作者Spencer Hill
相关产品推荐
相关产品推荐

