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问题,以及相关解决方案,希望对你有所帮助!

实践出真知,与君共勉

### 解决 Docker Pull 镜像失败的方法 当遇到 `docker pull` 操作失败的情况时,可能的原因包括网络连接不稳定、默认镜像源速度过慢或不可达等问题。针对这些问题有多种有效的解决方案。 #### 使用国内镜像加速器 为了提高下载效率并减少错误发生率,建议配置国内的Docker镜像加速服务。常见的可选地址如下: - 百度云提供的公共仓库:`https://mirror.baidubce.com`[^1] - 南京大学开源软件镜像站:`https://docker.nju.edu.cn`[^1] 这些站点能够显著改善中国地区的访问体验,加快镜像的速度。 #### 修改 Docker Daemon 设置 通过编辑 `/etc/docker/daemon.json` 文件来设置镜像加速链接是一个常用的做法。具体操作为使用文本编辑工具打开该文件,并加入以下内容之一作为配置项: ```json { "registry-mirrors": [ "https://daocloud.io", "https://9cpn8tt6.mirror.aliyuncs.com", "https://registry.docker-cn.com" ] } ``` 上述 JSON 片段中的 URL 列表提供了多个可靠的镜像源选项[^3]。完成修改之后保存更改并退出编辑模式。 #### 更新 DNS 配置 (可选) 对于某些特定环境下的问题,还可以尝试调整系统的DNS解析服务器至更稳定的服务提供商处,比如Google Public DNS: ```bash vi /etc/resolv.conf ``` 将其中的内容替换为: ``` nameserver 8.8.8.8 nameserver 8.8.4.4 ``` 这一步骤并非总是必要的,但在某些情况下可以帮助解决问题。 #### 应用变更 最后,在完成了以上任何一项改动后都需要重新加载守护进程配置以及重启 Docker 服务以使新设定生效: ```shell systemctl daemon-reload systemctl restart docker ``` 这样就能确保所有的更新都被正确应用到当前环境中去了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华尔街的幻觉

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值