背景
在校园服务器(无公网 IP,可访问外网)上使用 Docker Compose 安装 Dify 开源版时,遇到镜像拉取失败的问题。本文记录完整的排查和解决过程,适合同样在国内服务器上部署 Dify 或其他 Docker 应用的朋友参考。
环境信息:
- 服务器:Dell PowerEdge R730xd
- 系统:Ubuntu 22.04
- Docker:Community Edition
- Dify 版本:1.13.3
问题现象
执行
docker compose up -d 后,所有服务均报错:虽然已在
/etc/docker/daemon.json 中配置了镜像加速源,但 Docker 始终直连 registry-1.docker.io 而不走镜像站。排查过程
第一步:排除防火墙干扰
最初怀疑是 ufw 防火墙阻挡了出站流量,尝试了
ufw disable、放行 53 端口等操作,均无效。关键线索:报错是
Could not resolve host(DNS 解析失败),而非连接被拒绝,因此防火墙不是原因。第二步:定位根本原因
根本原因:USTC Docker 镜像站已于 2024 年关闭,域名已下线,并非网络或 DNS 配置问题。163、阿里云个人镜像加速等主流镜像站也相继停服或限制访问。
⚠️ 网上大量教程仍在推荐docker.mirrors.ustc.edu.cn、hub-mirror.c.163.com等已失效的镜像站,请勿再使用。
第三步:批量测试当前可用镜像源
镜像站 | 测试结果 | 说明 |
HTTP 403 | 仅限校园网 IP | |
超时 | 不可用 | |
超时 | 不可用 | |
超时 | 不可用 | |
HTTP 401 | ✅ 可用 |
💡/v2/返回 401 不代表不可用。Docker Registry 规范中,未带认证信息访问/v2/返回 401 是正常响应,说明服务在线。返回 000(连接失败)或超时才代表不通。
第四步:验证 DaoCloud 并更新配置
第五步:只启动核心服务
Dify 的
docker-compose.yaml 包含 30+ 个镜像,其中大量是可选的向量数据库(Weaviate、Milvus、Elasticsearch、Qdrant 等)。直接执行 docker compose up -d 会尝试拉取全部镜像,任意一个失败就会导致整体中断。Dify 核心镜像清单(v1.13.3)
以下镜像均来自 Docker Hub,可通过 DaoCloud 镜像加速拉取:
镜像 | 说明 |
langgenius/dify-api:1.13.3 | API 服务(worker 同镜像) |
langgenius/dify-web:1.13.3 | 前端 |
langgenius/dify-sandbox:0.2.14 | 沙箱执行环境 |
langgenius/dify-plugin-daemon:0.5.3-local | 插件守护进程 |
postgres:15-alpine | 主数据库 |
redis:6-alpine | 缓存 |
nginx:latest | 反向代理 |
busybox:latest | 权限初始化 |
注意事项
阿里云个人镜像加速已失效
/v2/ 握手返回 200,但实际拉取报错:This request is forbidden。不要使用。NJU 镜像站限校园网 IP
南京大学镜像站对非教育网出口 IP 返回 403。可用以下命令查看服务器出口 IP 归属:
一句话总结
在国内服务器部署 Docker 应用前,先用curl逐一测试镜像站连通性,再写入daemon.json,不要照抄过期教程。目前(2025 年)推荐使用:docker.m.daocloud.io。
