Dify1.8.0更新,Docker 无法拉取镜像怎么破?
前两天预告了 Dify 1.8.0的更新, 最落地的功能是 单个模型的多凭证(API-KEY)管理。
前言
过了48h,官网正式发布Dify v1.8.0。
然后在服务器上更新时报错:“Docker 无法从 Docker Hub 拉取镜像”,即使配置了国内镜像源,即使配置了DNS。
~ dify-1.8.0/docker$ sudo docker compose up -d
[+] Running 3/3✘ worker_beat Error Get "https://registry-1.docker.io/v2/": context deadline exceeded 15.9s! api Interrupted 15.9s! worker Interrupted 15.9s
Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded
问题说明:worker
容器拉取镜像失败。
docker配置:/etc/docker/daemon.json
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com","https://smo4u0za.mirror.aliyuncs.com"]
}
如果你也遇到这样的问题,也不方便配置代理。
可以尝试两个方案: 手动推送镜像到阿里云,或 手动中转。
方案1. 手动推送镜像到阿里云
假设咱有两台机子:
- 服务器A —— 能拉取镜像
- 服务器B —— 不能拉取镜像
我们要在服务器A上拉取–推送成功后,服务器B上进行拉取。
1. 创建命名空间
开通阿里云的容器镜像服务【个人版实例】,创建1个命名空间。
设置访问凭证密码
记录下登录命令:docker login
“crpi-ihwfu8i46xx-.com” 是[个人实例的访问域名],登录自己的阿里云账户查看。
2. 在服务器A上推送镜像
2.1 登录阿里云镜像仓库
用这个命令登录仓库
sudo docker login --username=aliyun4043126316 crpi-ihwfu8i46mbaeahj.cn-hangzhou.personal.cr.aliyuncs.com
2.2 拉取 Docker Hub 镜像
在能拉取镜像的机子上拉取镜像
sudo docker pull langgenius/dify-api:1.8.0
2.3 给镜像打 tag
换成你的命名空间和仓库名,比如 dify18/dify-api
sudo docker tag langgenius/dify-api:1.8.0 crpi-ihwfu8i46mbaeahj.cn-hangzhou.personal.cr.aliyuncs.com/dify/dify-api:1.8.0
格式一般是:
sudo docker tag [本地镜像] [个人实例的访问域名]/[命名空间]/[镜像名称:镜像版本号]
2.4 推送到阿里云
push 的就是 tag 后面一串,完整的阿里云镜像路径
docker push crpi-ihwfu8i46mbaeahj.cn-hangzhou.personal.cr.aliyuncs.com/dify/dify-api:1.8.0
3.在服务器B上拉取镜像
先参考 #2.1 登录仓库,再拉取
docker pull crpi-ihwfu8i46mbaeahj.cn-hangzhou.personal.cr.aliyuncs.com/dify/dify-api:1.8.0
docker ps
就能看到dify-api:1.8.0
镜像了
打开 dify\docker\docker-compose.yaml
将 3处 “langgenius/dify-api:1.8.0” 都替换成 “crpi-ihwfu8i46mbaeahj.cn-hangzhou.personal.cr.aliyuncs.com/dify18/dify-api:1.8.0”
最后docker compose成功
sudo docker compose -p dify180 up -d
[+] Running 13/13✔ Network dify180_default Created 0.1s ✔ Network dify180_ssrf_proxy_network Created 0.0s ✔ Container dify180-redis-1 Started 0.3s ✔ Container dify180-web-1 Started 0.3s ✔ Container dify180-sandbox-1 Started 0.3s ✔ Container dify180-weaviate-1 Started 0.3s ✔ Container dify180-db-1 Healthy 2.8s ✔ Container dify180-ssrf_proxy-1 Started 0.3s ✔ Container dify180-plugin_daemon-1 Started 3.0s ✔ Container dify180-api-1 Started 3.0s ✔ Container dify180-worker_beat-1 Started 3.0s ✔ Container dify180-worker-1 Started 3.0s ✔ Container dify180-nginx-1 Started 3.3s
方案2. 手动中转
在能访问 Docker Hub 的环境先拉下来,再导出/导入:
## 服务器A上操作
docker pull langgenius/dify-api:1.8.0
docker save langgenius/dify-api:1.8.0 -o dify-api.tar
scp dify-api.tar [服务器B]:/tmp## 服务器B上操作
docker load -i /tmp/dify-api.tar
小结
如果你只需要解决 单个镜像,只需要导入一次,用 方案 2 手动中转 就行;
如果要长期使用dify,长期更新镜像,导入到多个机子,✅推荐用 方案1 推送阿里云再导入
以上是Dify更新过程中遇到的docker问题,以及相关解决方案,希望对你有所帮助!
实践出真知,与君共勉