dicktv_8341 2025-09-30 20:13 采纳率: 66.7%
浏览 42

docker+Vllm部署大模型后,局域网访问open-webui无法看见模型列表

问题遇到的现象和发生背景

采用docker方式,以VLLM架构本地部署Qwen3-32B-FP8模型,并以open-webui作为前端,访问本地VLLM大模型服务,在宿主机可以登陆open-webui并和大模型对话,但是在局域网的其他机器上,输入宿主机IP:3212之后,可以登陆open-webui并注册,但是在模型目录却无法看见本地部署的Qwen3-32B-FP8模型(open-webui里面的名字是CQUPT_EA)

另一个奇怪的事情是,我在宿主机的open-webui里面,如果在管理员面板设置openai api的话,反而本地宿主机也看不到模型

img

img

但如果我不进入管理员面板,在open-webui左下角直接进入设置

img


将API url设置好之后,反而就能看见模型列表了

img

我的问题究竟出在哪里呢?

  1. 局域网其他机器通过宿主机IP:3212可以访问open-webui前端,但是看不到模型列表?
  2. 宿主机按照晚上的教程,管理员面板设置后,始终无法看到模型列表,反而不进入管理员面板,在左下角设置里直接设置API URL,反而宿主机就能看到模型列表了?

docker compose 代码如下:

services:
  vllm-backend:
    image: vllm/vllm-openai:latest
    container_name: vllm-backend
    runtime: nvidia
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    volumes:
      - /home/frankmartin/Models/models/Qwen3-32B-FP8:/model
    command:
      --model /model
      --served-model-name CQUPT_EA
      --tensor-parallel-size 1
      --gpu-memory-utilization 0.95
      --max-model-len 32768
      --block-size 16
      --cpu-offload-gb 0
      --enable-chunked-prefill
      --api-key UZI666
      --host 0.0.0.0
      --port 8000
    ports:
      - "8000:8000"
    networks:
      - openwebui-net
 
 
  open-webui:
    image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/open-webui/open-webui:v0.6.25
    container_name: open-webui-app
    ports:
      - "3212:8080"
    volumes:
      - open-webui-data:/app/backend/data
    environment:
      - OLLAMA_BASE_URL=http://vllm-backend:8000
      - OPENAI_API_BASE_URL=http://10.16.32.60:8000/v1
      - OPENAI_API_KEY=UZI666
      - VLLM_API_KEY=UZI666 
      - WEBUI_NAME=CQUPT_EA_Alpha
      - WEBUI_URL=http://localhost:3212
      - DISABLE_SIGNUP=false
      - VLLM_API_KEY=UZI666
      - SEARCH_ENGINE_ENABLED=true
      - SEARCH_ENGINE_URL=http://searxng:8080/search
      - SEARCH_ENGINE_NAME=searxng
      - SEARCH_ENGINE_TIMEOUT=15
      
      - REDIS_URL=redis://redis:6379/0
      - WEBUI_SECRET_KEY=your_secure_random_key_here
    restart: unless-stopped
    depends_on:
      - vllm-backend
      - searxng
      - redis
    networks:
      - openwebui-net
      
  searxng:
    image: searxng/searxng
    container_name: searxng
    ports:
      - "8080:8080"
    volumes:
      - searxng-config:/etc/searxng
    environment:
      - SEARXNG_SETTINGS__server__public_instance=True
      - SEARXNG_SETTINGS__brand__instance_name=CQUPT_EA_Search
    networks:
      - openwebui-net
    restart: unless-stopped
 
  
  redis:
    image: redis:alpine
    container_name: redis
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    command: redis-server --appendonly yes
    networks:
      - openwebui-net
    restart: unless-stopped
 
networks:
  openwebui-net:
    driver: bridge
 
 
volumes:
  open-webui-data:
    driver: local
  searxng-config:
    driver: local
  redis-data:
    driver: local
操作环境、软件版本等信息

系统Ubuntu24.04 Lts,计算机配置1024GB DDR5 4800内存,显卡Rtx 5880 Ada 显存48G,显卡驱动为最新582.82.09, cuda版本13.0

img

vllm版本为0.9.2

img

尝试过的解决方法

通过询问AI和查阅资料,我首先在open-webui的工作空间里面,将我部署的模型设置为公开(全部可见)

img

但局域网客户机仍然看不到模型列表
后来询问AI,说可能是我的命令里面没有把宿主机IP添加进去,也就是OPENAI_API_BASE 这个部分,我又添加进去了,宿主机局域网IP为10.16.32.60,代码如下

    environment:
      - OLLAMA_BASE_URL=http://vllm-backend:8000
      - OPENAI_API_BASE_URL=http://10.16.32.60:8000/v1
      - OPENAI_API_KEY=UZI666
      - VLLM_API_KEY=UZI666 

但局域网客户机仍然看不到模型列表

我想要达到的结果

局域网客户机通过宿主机IP:3212能够访问并使用我在宿主机上部署的大模型

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2025-09-30 20:14
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    你遇到的问题是关于 Docker + VLLM + Open-WebUI 部署后,局域网内的其他机器无法看到模型列表。这看起来是一个网络配置或服务暴露问题,尤其是在 OPENAI_API_BASE_URL 的设置和 open-webui 的访问权限控制方面。


    ✅ 问题核心分析

    从你的描述来看:

    1. 宿主机可以正常访问模型(即能看到模型列表);
    2. 局域网的其他设备通过宿主机IP:3212能登录 open-webui,但看不到模型列表
    3. 在管理员面板中设置 API URL 后反而无法看到模型,而直接在左下角设置 API URL 反而可以
    4. 这说明 Open-WebUI 对 API URL 的解析逻辑存在差异,可能与 网络可访问性、域名绑定、容器内网络配置 等有关。

    🔍 问题根源

    1. VLLM 后端监听地址不正确

    你当前的 vllm-backend 容器配置如下:

    ports:
      - "8000:8000"
    

    这表示 VLLM 服务监听的是容器内部的 8000 端口,并映射到宿主机的 8000 端口。但如果你希望 局域网其他设备能够访问 VLLM 服务,你需要确保 VLLM 服务监听的是 0.0.0.0 而不是 127.0.0.1

    你已经设置了:

    --host 0.0.0.0
    

    这是正确的,但需要确认是否真的生效。你可以通过以下命令验证:

    docker logs vllm-backend
    

    查看日志是否有类似如下内容:

    INFO: Uvicorn running on http://0.0.0.0:8000
    

    如果日志显示 127.0.0.1,则说明配置未生效。


    2. OPENAI_API_BASE_URL 设置错误

    你在 open-webui 的环境变量中设置了:

    - OPENAI_API_BASE_URL=http://10.16.32.60:8000/v1
    

    但是,这个 IP 是宿主机的局域网 IP,而不是容器内的 IP。当 open-webui 在容器中运行时,它会尝试连接 http://10.16.32.60:8000/v1,但该 IP 只能在宿主机上访问,不能从容器内部访问

    ⚠️ 关键点:
    容器中的 open-webui 应该通过容器网络访问 VLLM 服务,而不是通过宿主机的 IP。


    ✅ 解决方案

    🧩 第一步:确保 VLLM 服务在容器内监听 0.0.0.0 并且开放端口

    修改 vllm-backendcommand 参数(确保 --host 0.0.0.0 存在):

    command:
      --model /model
      --served-model-name CQUPT_EA
      --tensor-parallel-size 1
      --gpu-memory-utilization 0.95
      --max-model-len 32768
      --block-size 16
      --cpu-offload-gb 0
      --enable-chunked-prefill
      --api-key UZI666
      --host 0.0.0.0
      --port 8000
    

    并确保端口映射正确:

    ports:
      - "8000:8000"
    

    🧩 第二步:在 open-webui 中使用容器内网络访问 VLLM

    不要使用宿主机的 IP,而是使用 Docker 网络中定义的服务名(如 vllm-backend):

    environment:
      - OLLAMA_BASE_URL=http://vllm-backend:8000
      - OPENAI_API_BASE_URL=http://vllm-backend:8000/v1
      - OPENAI_API_KEY=UZI666
      - VLLM_API_KEY=UZI666
      ...
    

    ⚠️ 不要使用宿主机 IP,而是使用容器名 vllm-backend,因为 open-webuivllm-backend 在同一个 Docker 网络中。


    🧩 第三步:确保 open-webui 的前端也能访问到模型

    你提到在 管理员面板中设置 API URL 后无法看到模型,而在 左下角设置 API URL 后可以看到模型,这表明:

    • 管理员面板中设置的 API URL 会被覆盖或处理方式不同
    • 左下角设置的 API URL 更接近实际请求路径

    建议你始终在 左下角设置 API URL,或者在 open-webui 的环境变量中统一设置:

    - OPENAI_API_BASE_URL=http://vllm-backend:8000/v1
    - OPENAI_API_KEY=UZI666
    

    🧩 第四步:检查防火墙和端口开放情况

    确保宿主机上的防火墙允许 8000 和 3212 端口 被外部访问:

    sudo ufw allow 8000/tcp
    sudo ufw allow 3212/tcp
    

    🧩 第五步:验证 VLLM 是否可以通过局域网访问

    从另一台设备 ping 宿主机 IP(如 10.16.32.60),然后尝试访问:

    http://10.16.32.60:8000
    

    如果页面无法打开,可能是 VLLM 没有正确监听 0.0.0.0防火墙限制了访问


    ✅ 修改后的完整 docker-compose.yml 示例

    services:
      vllm-backend:
        image: vllm/vllm-openai:latest
        container_name: vllm-backend
        runtime: nvidia
        deploy:
          resources:
            reservations:
              devices:
                - driver: nvidia
                  count: all
                  capabilities: [gpu]
        volumes:
          - /home/frankmartin/Models/models/Qwen3-32B-FP8:/model
        command:
          --model /model
          --served-model-name CQUPT_EA
          --tensor-parallel-size 1
          --gpu-memory-utilization 0.95
          --max-model-len 32768
          --block-size 16
          --cpu-offload-gb 0
          --enable-chunked-prefill
          --api-key UZI666
          --host 0.0.0.0
          --port 8000
        ports:
          - "8000:8000"
        networks:
          - openwebui-net
    
      open-webui:
        image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/open-webui/open-webui:v0.6.25
        container_name: open-webui-app
        ports:
          - "3212:8080"
        volumes:
          - open-webui-data:/app/backend/data
        environment:
          - OLLAMA_BASE_URL=http://vllm-backend:8000
          - OPENAI_API_BASE_URL=http://vllm-backend:8000/v1
          - OPENAI_API_KEY=UZI666
          - VLLM_API_KEY=UZI666 
          - WEBUI_NAME=CQUPT_EA_Alpha
          - WEBUI_URL=http://localhost:3212
          - DISABLE_SIGNUP=false
          - SEARCH_ENGINE_ENABLED=true
          - SEARCH_ENGINE_URL=http://searxng:8080/search
          - SEARCH_ENGINE_NAME=searxng
          - SEARCH_ENGINE_TIMEOUT=15
          - REDIS_URL=redis://redis:6379/0
          - WEBUI_SECRET_KEY=your_secure_random_key_here
        restart: unless-stopped
        depends_on:
          - vllm-backend
          - searxng
          - redis
        networks:
          - openwebui-net
    
      searxng:
        image: searxng/searxng
        container_name: searxng
        ports:
          - "8080:8080"
        volumes:
          - searxng-config:/etc/searxng
        environment:
          - SEARXNG_SETTINGS__server__public_instance=True
          - SEARXNG_SETTINGS__brand__instance_name=CQUPT_EA_Search
        networks:
          - openwebui-net
        restart: unless-stopped
    
      redis:
        image: redis:alpine
        container_name: redis
        ports:
          - "6379:6379"
        volumes:
          - redis-data:/data
        command: redis-server --appendonly yes
        networks:
          - openwebui-net
        restart: unless-stopped
    
    networks:
      openwebui-net:
        driver: bridge
    
    volumes:
      open-webui-data:
        driver: local
      searxng-config:
        driver: local
      redis-data:
        driver: local
    

    ✅ 最终验证步骤

    1. 重启所有服务

      docker-compose down
      docker-compose up -d
      
    2. 在局域网中访问

      http://<宿主机IP>:3212
      
    3. 登录后进入设置页面,手动填写 API URL:

      http://vllm-backend:8000/v1
      
    4. 查看模型列表是否可见


    ✅ 总结

    | 问题 | 解决方案 | |------|----------| | 局域网无法看到模型 | 使用容器内服务名 vllm-backend 而不是宿主机 IP | | 管理员面板设置失败 | 避免使用管理员面板,直接在前端设置 API URL | | VLLM 监听地址错误 | 确保 --host 0.0.0.0 且日志中显示正确 | | 端口未开放 | 检查宿主机防火墙,确保 8000 和 3212 端口开放 |


    如有进一步问题,欢迎继续提问!

    评论

报告相同问题?

问题事件

  • 修改了问题 9月30日
  • 创建了问题 9月30日