Lazy loaded image
字数 0阅读时长 1 分钟
Invalid Date

背景

在校园服务器(无公网 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.cnhub-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
上一篇
办公软件 | 21个真正提升办公效率的快捷键你最喜欢哪些?
下一篇
技术分享 | 钉钉机器人对接 OpenClaw 实战