Duix.Heygem icon indicating copy to clipboard operation
Duix.Heygem copied to clipboard

提交定制失败 & 建立funasr连接异常的解决方法

Open lbxmaker opened this issue 4 weeks ago • 1 comments

问题描述

在部署 Duix-Avatar 项目时,上传视频进行“快速定制”时失败。 前端可能提示 SQLite 错误,或者长时间无响应。

查看后台日志 (docker logs -f duix-avatar-gen-video),出现以下报错:

  1. 连接异常
    WARNING | asr_fun:init_conn:53 - 建立funasr连接异常:[Errno -2] Name or service not known
    socket.gaierror: [Errno -2] Name or service not known
    
  2. ASR启动失败
    /run.sh: 10: --hotword: not found
    

原因分析

经过排查,主要存在两个问题叠加:

  1. 容器网络名称不匹配:主程序代码中硬编码了连接地址为 ws://funasr:10095,但在 docker-compose.yml 中,ASR 服务的容器名被定义为 duix-avatar-asr,导致主程序无法解析主机名(Name not known)。
  2. 镜像脚本 Bug:官方镜像 guiji2025/fun-asr 中的启动脚本 /run.sh 存在语法错误。在 --certfile 0 这一行后面少了一个换行斜杠 \,导致 --hotword 参数变成了未知命令,ASR 服务因此无法正常启动。

解决方案

不需要重新构建镜像,只需修改 docker-compose.yml 文件即可。 请将 duix-avatar-asr 服务的配置替换为以下内容:

  1. 将 container_name 强制指定为 funasr
  2. 重写 command 指令,手动修复断裂的启动脚本

修改后的 docker-compose.yml 完整代码:

networks:
ai_network:
 driver: bridge

services:
duix-avatar-tts:
 image: guiji2025/fish-speech-ziming
 container_name: duix-avatar-tts
 restart: always
 runtime: nvidia
 environment:
   - NVIDIA_VISIBLE_DEVICES=0
   - NVIDIA_DRIVER_CAPABILITIES=compute,graphics,utility,video,display
 ports:
   - '18180:8080'
 volumes:
   - d:/duix_avatar_data/voice/data:/code/data
 command: /bin/bash -c "/opt/conda/envs/python310/bin/python3 tools/api_server.py --listen 0.0.0.0:8080"
 networks:
   - ai_network

duix-avatar-asr:
 image: guiji2025/fun-asr
 # ----------------------------------------------------------------
 # 【修复点 1】:容器名称必须叫 funasr,否则主程序连接时会报 "Name not known"
 # ----------------------------------------------------------------
 container_name: funasr 
 restart: always
 runtime: nvidia
 privileged: true
 working_dir: /workspace/FunASR/runtime
 ports:
   - '10095:10095'
 # ----------------------------------------------------------------
 # 【修复点 2】:重写启动命令,修复原镜像 run.sh 中缺失斜杠的 Bug
 # 我们在这里把断掉的命令手动连起来,并加上正确的 --hotword 参数
 # ----------------------------------------------------------------
 command: >
   bash -c "bash run_server.sh
   --download-model-dir /workspace/models
   --vad-dir damo/speech_fsmn_vad_zh-cn-16k-common-onnx
   --model-dir damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorch
   --punc-dir damo/punc_ct-transformer_cn-en-common-vocab471067-large-onnx
   --lm-dir damo/speech_ngram_lm_zh-cn-ai-wesp-fst
   --itn-dir thuduj12/fst_itn_zh
   --certfile 0
   --hotword /workspace/models/hotwords.txt > log.txt 2>&1 &
   tail -f log.txt"
 deploy:
   resources:
     reservations:
       devices:
         - driver: nvidia
           count: all
           capabilities: [gpu]
 networks:
   - ai_network

duix-avatar-gen-video:
 image: guiji2025/duix.avatar
 container_name: duix-avatar-gen-video
 restart: always
 runtime: nvidia
 privileged: true
 volumes:
   - d:/duix_avatar_data/face2face:/code/data
 environment:
   - PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512
 deploy:
   resources:
     reservations:
       devices:
         - capabilities: [gpu]
 shm_size: '8g'
 ports:
   - '8383:8383'
 command: python /code/app_local.py
 networks:
   - ai_network

生效步骤

修改保存后,执行以下命令重建容器:

docker-compose down
docker-compose up -d

lbxmaker avatar Dec 01 '25 08:12 lbxmaker

本来准备试一试的,但是我是cuda12.8,用的docker-compose-5090.yml启动的容器,没有duix-avatar-asr服务。 @lbxmaker

JasonYangchen avatar Dec 01 '25 09:12 JasonYangchen

本来准备试一试的,但是我是cuda12.8,用的docker-compose-5090.yml启动的容器,没有duix-avatar-asr服务。 @lbxmaker

50系为了兼容砍掉了asr服务(要不然都部署不了),取舍的结果就是数字人的声音克隆效果会变差。

lbxmaker avatar Dec 02 '25 07:12 lbxmaker