You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Docker将Vitepress文档路由到主应用的/docs/子路径

如何通过Docker将Vitepress文档路由到主应用的/docs/子路径

看起来你已经搭好了基础的Docker环境,但502错误本质是Nginx没法成功连接到Vitepress容器,咱们一步步排查和修复这个问题:

1. 修正Nginx反向代理配置

首先确保Nginx的local.conf里的代理地址是正确的——Vitepress容器的服务名是vitepress,暴露的端口是9000,所以配置要这样写(注意WebSocket相关的头,Vitepress开发模式需要热更新,必须加这些):

location /docs/ {
    proxy_pass http://vitepress:9000/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    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;
    proxy_cache_bypass $http_upgrade;
}

之前你试过写http://vitepress:5173/,这明显不对,5173是主Vite应用的端口,Vitepress用的是9000,这是导致502的核心原因之一。

2. 调整Vitepress的监听配置

Vitepress默认只监听127.0.0.1,这在Docker容器里会导致外部(比如Nginx)无法访问。你需要修改package.json里的启动脚本,让它监听容器的所有IP:

"docs:dev": "vitepress dev docs --port=9000 --base=/docs/ --host=0.0.0.0"

加上--host=0.0.0.0后,Vitepress会响应来自容器外部的请求,Nginx才能顺利连接。

3. 优化Docker Compose配置

你不需要把Vitepress的9000端口暴露给主机(因为是通过Nginx反向代理访问),反而暴露端口可能导致不必要的冲突。修改docker-compose.yml里的vitepress服务,去掉ports配置:

vitepress:
  build:
    context: ../.
    dockerfile: ./docker/vitepress/Dockerfile
  # 移除下面的端口映射,容器内部通过服务名访问即可
  # ports:
  #   - '9000:9000'
  volumes:
    - '..:/var/www/html:delegated'
    - 'trinity-ui-vite-mnt:/var/run'
  networks:
    trinity-ui-vite-bridge:
      aliases:
        - trinity-ui-vite.local

好在所有服务都在同一个trinity-ui-vite-bridge网络里,Nginx可以直接通过服务名vitepress访问到Vitepress容器。

4. 验证容器连通性(可选但有用)

如果还是有问题,可以进入Nginx容器测试和Vitepress的连通性:

# 进入Nginx容器(替换成你的容器名)
docker exec -it tuiv_nginx_1 /bin/bash
# 测试能否访问Vitepress
curl http://vitepress:9000/docs/

如果curl能返回HTML内容,说明网络没问题;如果返回连接拒绝,那大概率是Vitepress没正确启动或者监听地址不对。

5. 重启所有容器

最后,重启所有容器让配置生效:

docker-compose -p tuiv down
docker-compose -p tuiv up --build -d

做完这些步骤后,你应该就能通过https://localhost:5173/docs/访问到Vitepress文档了。

备注:内容来源于stack exchange,提问作者Artur Müller Romanov

火山引擎 最新活动