Dify1.8.0更新,Docker 无法拉取镜像怎么破?

前两天预告了 Dify 1.8.0 的更新, 最落地的功能是 单个模型的多凭证(API-KEY)管理

前言

过了48h,官网正式发布Dify v1.8.0

然后在服务器上更新时报错:"Docker 无法从 Docker Hub 拉取镜像 ",即使配置了国内镜像源 ,即使配置了DNS

shell 复制代码
~ 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

shell 复制代码
{
    "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 登录阿里云镜像仓库

用这个命令登录仓库

bash 复制代码
sudo docker login --username=aliyun4043126316 crpi-ihwfu8i46mbaeahj.cn-hangzhou.personal.cr.aliyuncs.com
2.2 拉取 Docker Hub 镜像

在能拉取镜像的机子上拉取镜像

bash 复制代码
sudo docker pull langgenius/dify-api:1.8.0
2.3 给镜像打 tag

换成你的命名空间 和仓库名,比如 dify18/dify-api

bash 复制代码
sudo docker tag langgenius/dify-api:1.8.0 crpi-ihwfu8i46mbaeahj.cn-hangzhou.personal.cr.aliyuncs.com/dify/dify-api:1.8.0

格式一般是:

bash 复制代码
sudo docker tag [本地镜像] [个人实例的访问域名]/[命名空间]/[镜像名称:镜像版本号]
2.4 推送到阿里云

push 的就是 tag 后面一串,完整的阿里云镜像路径

bash 复制代码
docker push crpi-ihwfu8i46mbaeahj.cn-hangzhou.personal.cr.aliyuncs.com/dify/dify-api:1.8.0

3.在服务器B上拉取镜像

先参考 #2.1 登录仓库,再拉取

bash 复制代码
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成功

bash 复制代码
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 的环境先拉下来,再导出/导入:

bash 复制代码
## 服务器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问题,以及相关解决方案,希望对你有所帮助!

实践出真知,与君共勉