Jump to content

docker无法更新的临时解决办法:手动下载镜像


Recommended Posts

问题背景:

似乎是dockerhub禁止中国IP接入,一些人开全局代理就行了,但我这不行

 

所需工具:

1. Portainer-CE(unraid上安装的可以管理docker的docker,portainer/portainer-ce,幸好我之前安装了,没有安装的话可能需要先按照下文方式下载此镜像,然后上传到unraid某个文件夹然后用命令行安装此docker,方便后续上传镜像。具体方式我也不懂,请大佬补充)

2.  dget 镜像下载工具

3. 网络环境。我最开始用香港代理无法下载,强制代理docker.io也不行,后来改到新加坡就好了

 

使用举例:kodcloud/kodbox:latest

1. 下载dget windows版exe文件,cmd执行命令

dget.exe kodcloud/kodbox:latest

 

如果成功的话输出信息如下图,并在dget.exe同目录下生成tmp_kodcloud文件夹,注意有些镜像文件比较大,会下很久,卡在请求成功那一行,我下载第11层的时候卡了好久然后失败,在运行一次就好了,前面下载好的也不用再下载一遍

image.thumb.png.5338047b84e546edcfbd7ce33d66b67b.png

 

 

2. 等下载完成后,tmp_kodcloud文件夹中会生成一个tar.gz压缩包,在Portainer-CE界面的这里上传压缩包并设置标签为kodcloud/kodbox:latest然后上传

image.thumb.png.f9a1f594c0adc41acf3f0677a05897e6.png

 

image.thumb.png.41089d8966c0cc88b5e20a9f904f798d.png

 

 

3. 最后在unraid的docker界面更新这个docker就好了,由于镜像已经存在,下载会被自动跳过

 

Link to comment

贴吧看到一个可以挂代理的方法

docker pull是基于dockerd的网络环境,解决方法:1.直接把unraid整个接全局科学,这样会影响ip敏感的pt之类或公网同步之类的服务;2.结合旁路由规划docker容器和unraid网络进行代理分流;3.单独给dockerd加个代理,这样拉镜像docker pull就走这个代理了,不会影响其他容器网络
以3为例
1.unraid docker启动脚本位置在/usr/local/etc/rc.d/rc.docker在webui上的docker操作都会调用这个shell脚本
2.打开rc.docker文件在533行有启动命令nohup $UNSHARE --propagation slave -- $DOCKER -p $DOCKER_PIDFILE $DOCKER_OPTS >>$DOCKER_LOG 2>&1 &
3.在nohup后面增加env https_proxy=http://梯子:端口 http_proxy=http://梯子:端口
vi /usr/local/etc/rc.d/rc.docker
键盘↓找到启动命令,键盘➡移动光标到nohup后,按 i 进入编辑模式,增加完对应参数后按 esc 推出编辑模式,按 : 后输入 wq 然后回车,这样就保存退出了
或者用自己现有的文件管理器filebowser之类的编辑

5.在web页面 - setting - docker - enabled docker 把docker no掉再yes打开,重启下docker让环境变量生效
6.像往常一样更新镜像

 

我用prpxy插件没用但是这样有用

Link to comment
4 hours ago, rabbitwx said:

贴吧看到一个可以挂代理的方法

docker pull是基于dockerd的网络环境,解决方法:1.直接把unraid整个接全局科学,这样会影响ip敏感的pt之类或公网同步之类的服务;2.结合旁路由规划docker容器和unraid网络进行代理分流;3.单独给dockerd加个代理,这样拉镜像docker pull就走这个代理了,不会影响其他容器网络
以3为例
1.unraid docker启动脚本位置在/usr/local/etc/rc.d/rc.docker在webui上的docker操作都会调用这个shell脚本
2.打开rc.docker文件在533行有启动命令nohup $UNSHARE --propagation slave -- $DOCKER -p $DOCKER_PIDFILE $DOCKER_OPTS >>$DOCKER_LOG 2>&1 &
3.在nohup后面增加env https_proxy=http://梯子:端口 http_proxy=http://梯子:端口
vi /usr/local/etc/rc.d/rc.docker
键盘↓找到启动命令,键盘➡移动光标到nohup后,按 i 进入编辑模式,增加完对应参数后按 esc 推出编辑模式,按 : 后输入 wq 然后回车,这样就保存退出了
或者用自己现有的文件管理器filebowser之类的编辑

5.在web页面 - setting - docker - enabled docker 把docker no掉再yes打开,重启下docker让环境变量生效
6.像往常一样更新镜像

 

我用prpxy插件没用但是这样有用

"3.单独给dockerd加个代理,这样拉镜像docker pull就走这个代理了,不会影响其他容器网络"

请问下,方案3的意思是,对emby(假设这个容器是emby这种)这个容器拉取最新的,就是走代理,但是实际访问内网或外网访问emby,不走代理,是这个意思吗?

Link to comment
17 hours ago, xayane said:

"3.单独给dockerd加个代理,这样拉镜像docker pull就走这个代理了,不会影响其他容器网络"

请问下,方案3的意思是,对emby(假设这个容器是emby这种)这个容器拉取最新的,就是走代理,但是实际访问内网或外网访问emby,不走代理,是这个意思吗?

是的只有拉取docker镜像的时候走代理,我又找到了另一个方法用阿里云自己建一个库但是没这个方便

Link to comment
On 6/13/2024 at 4:35 PM, rabbitwx said:

贴吧看到一个可以挂代理的方法

docker pull是基于dockerd的网络环境,解决方法:1.直接把unraid整个接全局科学,这样会影响ip敏感的pt之类或公网同步之类的服务;2.结合旁路由规划docker容器和unraid网络进行代理分流;3.单独给dockerd加个代理,这样拉镜像docker pull就走这个代理了,不会影响其他容器网络
以3为例
1.unraid docker启动脚本位置在/usr/local/etc/rc.d/rc.docker在webui上的docker操作都会调用这个shell脚本
2.打开rc.docker文件在533行有启动命令nohup $UNSHARE --propagation slave -- $DOCKER -p $DOCKER_PIDFILE $DOCKER_OPTS >>$DOCKER_LOG 2>&1 &
3.在nohup后面增加env https_proxy=http://梯子:端口 http_proxy=http://梯子:端口
vi /usr/local/etc/rc.d/rc.docker
键盘↓找到启动命令,键盘➡移动光标到nohup后,按 i 进入编辑模式,增加完对应参数后按 esc 推出编辑模式,按 : 后输入 wq 然后回车,这样就保存退出了
或者用自己现有的文件管理器filebowser之类的编辑

5.在web页面 - setting - docker - enabled docker 把docker no掉再yes打开,重启下docker让环境变量生效
6.像往常一样更新镜像

 

我用prpxy插件没用但是这样有用

亲测有用,非常有效

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...