菜单
Discourse push 最新镜像到阿里云工作台

解决Docker国内无法拉取镜像(附Discourse使用阿里云仓库更新、安装教程)

解决Docker国内无法拉取镜像、discourse手动下载镜像更新、discourse使用阿里云仓库安装、dockerd配置代理、手动下载镜像、阿里云仓库pushpull镜像、docker使用国内镜像源、使用阿里云专属加速地址、docker匿名pull、重启docker服务验证配置等内容

引言

Discourse一款功能强大、现代化的开源论坛软件。其现代化、简洁的界面设计等特点深受我的喜欢。如果你还没有部署安装,可以参考:在独立环境和Nginx的环境中部署搭建Discourse论坛 | BOBO Blog | 和nginx共存 (soulcloser.com) ,安装过程无法pull镜像:首次安装

由于众所周知的原因,在使用Docker拉取新版本的镜像时,可能会遇到一些问题。即使更换国内源,也因为国内源没有及时更新,在更新最新版本时找不到镜像。本篇文章就列出以下几个解决方案,希望能对你的镜像拉取有帮助😉并分享使用docker push、pull镜像至阿里云免费仓库。

问题描述

使用./launcher rebuild app更新discourse时卡在pull界面,多次重试无法下载镜像;

或使用命令拉取Discourse镜像时,提示:

Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

使用国内镜像源

使用阿里源专属加速地址

解决方法一,使用国内镜像源。由于网络限制,直接从Docker官方镜像库拉取镜像可能会遇到超时问题。可以通过添加国内镜像源来解决这个问题。首先是阿里云,需要登录后才能获取加速地址:

  • 登录阿里云,右上方搜索栏处搜索“容器镜像服务“→”管理控制台“→”镜像工具“→”镜像加速器“,或者直接链接跳转到阿里云的容器镜像服务https://cr.console.aliyun.com ,得到专属的镜像加速地址,类似于“https://********.mirror.aliyuncs.com”
  •  打开或新建Docker的配置文件
vi /etc/docker/daemon.json
  • 添加刚刚获取的专属镜像源加速地址,也可以直接在官网复制对应系统的命令添加

{
“registry-mirrors”: [“https://********.mirror.aliyuncs.com”]
}

还没完!请看下文⬇️

不需要登录账号(支持匿名pull)

Docker 官方和国内很多云服务商都提供了国内加速器服务。

比如我想把这些都添加上,那么只需要在daemon.json文件中写入:⬇️

{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://reg-mirror.qiniu.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}

重启Docker服务、验证配置

完事之后记得重启服务使生效,随便检查下配置是否生效,配置没问题的话可以在docker info中找到你配置的源地址。

sudo systemctl daemon-reload        #重新加载systemd的配置文件
sudo systemctl restart docker       #重启docker
docker info                         #验证配置

配置Dockerd代理

如果配置国内镜像源无法解决问题,可以使用 HTTP/HTTPS 代理来加速镜像拉取、构建和使用,接下来介绍如何配置docker http代理(如果机器能走魔法就更好了)。

当你使用 docker pull 命令来拉取 Docker 镜像时,实际上是由 Docker 的守护进程 dockerd 来执行这个操作。而 dockerd 守护进程是由 systemd 管理的服务。因此如果你想在执行 docker pull 命令时使用 HTTP/HTTPS 代理,你需要通过 systemd 来配置这个代理,以便 dockerd 能够使用它。

  1. 创建或编辑 Docker 的 systemd 配置文件:通常,Docker 的 systemd 配置文件位于/etc/systemd/system/docker.service.d 目录下。如果没有这个目录,可以创建它。
sudo mkdir -p /etc/systemd/system/docker.service.d
  1. 然后,在该目录下创建或编辑一个名为 http-proxy.conf 的文件:
sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf
  1. 添加代理配置:添加代理配置:在 http-proxy.conf 文件中,添加以下内容来配置 HTTP 和 HTTPS 代理。💡 将 proxy.example.com:8080 替换为你的代理服务器地址和端口。HTTP_PROXY 用于代理访问 http 请求,HTTPS_PROXY 用于代理访问 https 请求。如果你有不需要通过代理的地址,可以在 NO_PROXY 变量中指定。
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080"
Environment="HTTPS_PROXY=http://proxy.example.com:8080"
Environment="NO_PROXY=localhost,127.0.0.1"
  1. 重新加载 systemd 配置并重启 Docker 服务

保存文件并退出编辑器,重新加载 systemd 配置并重启 Docker 服务。

sudo systemctl daemon-reload
sudo systemctl restart docker

完事之后可以通过这条命令检查 Docker 服务的环境变量配置,没有问题的话当你再次pull镜像时则会通过你配置的代理拉取。

sudo systemctl show --property=Environment docker

手动下载镜像(Discourse镜像)

说了那么多,结果我的问题还是没有解决:作为网站的管理员,保持网站的更新,提升安全性、功能性等任务再日常不过了。但是在我更新Discourse论坛的时候,没有办法pull到latest版本镜像,导致网站down掉……你说使用国内源(更新不及时国内源找不到镜像),你说使用http代理(懂得懂得)。为了解决这个问题,我们可以手动下载镜像到本地,再更新或安装。具体实现的方式:

  1. 使用浏览器从可信的镜像源下载对应的镜像文件(通常为.tar格式)加载到本地Docker即可(不推荐)。
  2. 通过境外的服务器pull镜像到境外服务器本地,“导出”再”导入“镜像。命令格式为
docker save -o <保存路径/文件名.tar> <镜像名:标签>      #导出镜像
docker load -i <路径/文件名.tar>                       #导入镜像

举个例子:假设你有一个名为 nginx 的镜像,先导出到/root文件夹下,把镜像下载到目标主机,再使用命令导入:

docker save -o /root/nginx.tar nginx:latest           #导出镜像到/root/文件夹下
docker load -i /root/nginx.tar                        #使用命令导入

阿里云仓库Push、Pull镜像

读者一看,麻烦,镜像包根本不好找,说的也是。等等,说好的discourse镜像呢?⬇️

先说我实现的方法:💡首先通过境外的机器下载镜像到境外机器本地,然后在境外机器把镜像上传到阿里云的个人镜像仓库中,最后在境内的服务器上登录个人的镜像仓库,把镜像pull到本地就行了,解决网络问题,且使用仓库管理方便!多提一嘴,可以本地自建仓库自行维护镜像,不过需要仓库机器能”魔法“。

push到仓库的话,方便其他机器pull镜像,也不需要魔法,速度很快。这里推荐阿里云的仓库,个人免费支持3个命名空间和300个仓库。具体仓库使用方法和命令阿里云中写的很详细了,这里就不贴图片了。比如我现在想把最新的discourse镜像分享给你,我只需要把我的公共仓库pull地址给你就行了。那么我们现在来实现上面的操作,这里只是以discourse镜像为例,授人以鱼不如授人以渔你说是吧?

  1. 首先,在https://cr.console.aliyun.com/这里”创建个人示例“,跟着向导“设置密码”,”创建命名空间”,“创建镜像仓库”。忘记密码可以在“个人实例”→“访问凭证”中修改
  1. 登录到境外机器,使用命令查找你要pull的镜像,比如最新discourse版本是discourse/base:2.0.20240708-0023。那么先pull到本地
docker pull discourse/base:2.0.20240708-0023
  1. 将镜像推送到Registry。登录导航到:阿里云容器镜像服务/实例列表/镜像仓库/基本信息,命令已经准备好了,只需修改部分值就行了。简而言之分为pull镜像登录修改tagpush 四步。像这样
Discourse push 最新镜像到阿里云

完了后在阿里云对应的仓库应该能看见刚刚push的镜像了

Discourse push 最新镜像到阿里云工作台
  1. 本地pull镜像。回到国内的机器,我设置的为公开仓库,无需登录即可直接可以pull到本地。如果你设置的是私有仓库,那么需要使用docker login登录,和上方是一样的。我的是1G的下行,几分钟镜像就过来了,非常快啊。其他版本镜像照葫芦画瓢就行了!
docker pull registry.cn-chengdu.aliyuncs.com/soulcloser/boboblog:latest #discourse:2.0.20240708-0023

Discourse安装、更新

更新

接上文,现在你把discourse镜像pull到本地了,只需要在/var/discourse/ 目录下执行想实现的命令就行了,你甚至都不需要把镜像tag修改为原来的tag。不信?我边写边执行命令实现呢,内容较简单就不贴图片了。

比如说你要更新论坛,思路就是先git pull新的仓库文件,使用命令重建时会显示更新论坛的镜像,把显示的镜像版本像上方一样下载到本地,最后rebuild,💡注意要下载新的镜像后再重构。像这样:

cd /var/discourse/
git pull
./launcher rebuild app    #下载镜像后再重构

首次安装

那你是第一次安装呢?这里主要是解决无法第一次安装无法pull镜像的问题。先看看这篇文章:在独立环境和Nginx的环境中部署论坛使用第二种方法安装,毕竟你没有办法直接pull镜像嘛。在这篇文章说的第二种方法中,完成了编辑 app.yml 文件这一步后就不要继续了,按照上方的方法把镜像下载到本地,然后使用这条链接中的3.重构discourse,也就是下方的命令⬇️完了!不知道有没有表达清楚。

./launcher bootstrap app
./launcher start app

结语

文章就到这里了,每个步骤我都有操作实现过,原创不易。希望这篇文章对你在Docker国内无法Pull镜像、使用阿里云仓库、更新安装discourse有所帮助。对文章内容有疑问或建议欢迎来论坛多指教😉https://bbs.soulcloser.com。文章分享链接:https://www.soulcloser.com/4290

版权声明 © 2024 BOBO Blog :原创文章,本文不允许在未获取作者同意的情况下以任何形式复制其内容、摘编、转载。

订阅评论
提醒
guest
0 评论
最新
最旧 最多投票
内联反馈
查看所有评论