Docker 构建报错:绕过 ghcr.io 解析失败问题

Docker 构建报错:绕过 ghcr.io 解析失败问题


Ollama
Open-LLM-VTuber Ollama Qwen 2.5 Sherpa-Onnx Edge-TTS

在搭建 Open-LLM-VTuber 执行 docker-compose up --build 时,出现 lookup ghcr.io: no such host 报错。

表现

测试宿主机执行 docker pull alpine 正常,说明外部 Docker 引擎连网没问题。报错发生在 Dockerfile 第 19 行,这意味着 Docker 在内部沙盒编译镜像时,虚拟 DNS 无法解析 ghcr.io 的真实 IP。国内网络环境下,GitHub 相关的容器镜像库常遭遇 DNS 阻断。

处理 Docker 虚拟机的 resolv.conf 比较麻烦且容易失效。直接改 Dockerfile 源码绕过 GHCR 源是更稳妥的做法。

image.png

问题分析

原项目 Dockerfile 第 19 行左右代码如下:

# Install uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /usr/local/bin/

代码引入了 uv 包管理器来加速安装过程,采用的方式是从 ghcr.io 拉取编译好的二进制文件。既然 Docker 沙盒访问 PyPI 官方库正常,把这步替换成原生的 pip 安装即可。

修改方案

  1. 打开源码目录下的 Dockerfile
  2. 找到并注释(或删除)依赖拉取代码:
# COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /usr/local/bin/
  1. 替换为标准的 pip 安装命令:
# Bypass GHCR and install uv directly via pip
RUN pip install uv
  1. 重新触发编译:
docker-compose up --build

执行后日志会跳过 GHCR 的拉取过程,直接打印 pip 下载依赖的进度条,编译链路打通。

Windows 系统的底层路径解析将 https:// 误认为了本地盘符导致构建崩溃;最彻底的解法是手动 git clone 项目源码到本地,并将 Docker 配置文件指向该本地目录进行构建。

步骤 1:手动将数字人源码克隆到本地

确保你当前在 F:\work_space\python_workspace\AIRI_Project 目录下执行:

# 使用 Git 将源码克隆到名为 "npc_engine" 的子文件夹中
git clone https://github.com/Open-LLM-VTuber/Open-LLM-VTuber.git npc_engine

步骤 2:修改为“纯本地引用”的配置文件

清空你的 docker-compose.yml,替换为以下配置。注意看 build: context: 的变化,它现在指向了刚刚下载的本地文件夹。

services:
  magic-witch-npc:
    build:
      # 【核心更改】直接指向刚刚 git clone 下来的本地源码目录
      context: ./npc_engine
    container_name: magic_witch_container
    ports:
      - "8000:8000"
      - "3000:3000"
    environment:
      - LLM_PROVIDER=openai
      - OPENAI_API_KEY=你的DEEPSEEK_API_KEY_填这里
      - OPENAI_BASE_URL=https://api.deepseek.com/v1
      - LLM_MODEL=deepseek-chat
      - TTS_ENGINE=edge-tts
    volumes:
      # 将 F 盘外部的模型挂载到刚编译好的容器中
      - ./models/witch:/app/live2d_models/witch
    restart: always

步骤 3:最终本地构建与点火

执行以下命令

# 强制基于本地源码进行容器构建并后台运行
docker-compose up -d --build

# 实时查看构建进度与启动日志
docker-compose logs -f
© 2026 Personal Website
Developed by Ryan 🫡