解决docker镜像失效的方法😎

7/4/2024 阿里云云服务器docker

# 起因

前几个星期在更新博客、重新部署项目时,docker构建拉取镜像始终不能成功。我就纳了闷了,明明只是多了几篇文章,配置也都没改,怎么之前行现在就不行了呢?难道是docker坏了?

经过一番搜索才发现,今年6月份,由于神秘力量,国内的公开docker镜像源基本已经下架了。因为服务器无法正常部署,那段时间又刚好在准备毕业答辩,博客的事情就先鸽了,如今毕业的适宜已经处理完啦,那就来着手解决一下docker镜像的问题吧。

# 上海交大镜像源

上海交大镜像源下架

# 中科大镜像源

中科大镜像源下架

阿里的镜像源也是,我之前用的是这个

# 解决方法

一位技术大佬写了一个叫docker_image_pusher的开源项目,可以利用Github Action将国外的Docker镜像转存到阿里云的私有仓库,这样国内的服务器就可以访问和使用了。我们来看看怎么实现

# 创建阿里云私有仓库

先登陆阿里云,进入阿里云的容器镜像服务,准备新建一个个人实例

镜像服务

然后新建一个命名空间

新建命名空间

上面这两步应该会让你设置密码和命名空间的名称,这个先记录一下,后面要用到

点击访问凭证,会显示用户名和仓库地址,这个也记录一下,后面要用到

访问凭证

# Fork项目

接下来就要去forkgithub的项目docker_image_pusher了,它能够帮忙将国外的Docker镜像转存到阿里云的私有仓库。

项目地址:https://link.juejin.cn/?target=https%3A%2F%2Fgithub.com%2Ftech-shrimp%2Fdocker_image_pusher

Fork一下项目

fork 项目

然后到fork后自己的项目中,进到setting > Secret and variables > Actions > New Repository secret,准备配置环境变量

点击new repository secret,依次将之前记录的信息填入 ALIYUN_NAME_SPACE: 命名空间 ALIYUN_REGISTRY: 仓库地址 ALIYUN_REGISTRY_PASSWORD: 密码 ALIYUN_REGISTRY_USER:用户名

alt text

完成后再切到code,编辑images文件

alt text

在文件里面输入想要拉取的镜像,然后点击commit

alt text

提交后就会自动开始拉取镜像了,切到action,action里面会显示正在运行,成功的话显示是这样

alt text

这样镜像就已经转存到阿里云的私有仓库了

# 查看镜像

回到阿里云,点击镜像仓库,就能够看到刚刚转存进去的镜像了

alt text

点击镜像名称,可以看详细的镜像信息

alt text

# 拉取阿里云私有仓库镜像

按照镜像信息里面的操作,把私有仓库的镜像拉到本地进行使用

登陆云服务器后,输入

docker login --username=xxxxxx registry.cn-guangzhou.aliyuncs.com

登陆成功后输入

docker pull registry.cn-guangzhou.aliyuncs.com/moyuu/node:[镜像版本号]

我这里用的是node:16-alpine,所以输入

docker pull registry.cn-guangzhou.aliyuncs.com/moyuu/node:16-alpine

输入完后镜像就拉取到本地了

# 配置docker file

接下来要配置使用本地的镜像,以咱们博客网站的dockerfile为例子~

FROM registry.cn-guangzhou.aliyuncs.com/moyuu/node:16-alpine

WORKDIR /project

COPY package*.json /project/

RUN npm install

COPY . /project

RUN npm run build

FROM registry.cn-guangzhou.aliyuncs.com/moyuu/nginx:1.21.6

COPY --from=0 /project/docs/.vuepress/dist /usr/share/nginx/MoyuuBlog

COPY --from=0 /project/nginx.conf /etc/nginx/conf.d/nginx.conf

将对应的镜像改为本地docker镜像的地址就可以啦,然后输入

docker build -t moyuu-blog .

开始构建镜像,完成后输入

docker run -itd -p 8085:3000 --name moyuu-blog-container moyuu-blog

创建容器,这样项目就部署成功啦

alt text

# 总结

由于不可抗力导致无法拉取docker镜像,网站也停了好久,不过问题总算解决了,博客网站也重新上线啦,以后还会不定期总结工作学习过程中遇到的知识,希望也能对大家有所帮助