概述

在安装k8s相关组件时经常会遇到需要下载一些外网的Docker镜像仓库,比如k8s的一个NFS存储类k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner ,国内的网络环境下无法使用docker pull将这些镜像拉取下来,而且在主流的国内镜像站里也找不到这些镜像仓库,这时候我们就需要想其他的办法来解决了,下面介绍两种相对比较简单的方法。

解决方案

1、使用能访问外网的云服务器

购买一个中国香港及其他境外地域的云服务器,从云服务器中下载好镜像再打包上传到我们自己的服务器上去。这里以腾讯云的轻量应用服务器为例,相对于常规的云服务器会便宜一些,以下示例是在新加坡的一台包月服务器上操作的。

首先登陆我们可以访问外网的云服务器,安装并验证Docker环境,安装教程参见在CentOS中安装Docker

安装好Docker环境之后,我们正常拉取我们需要的镜像

docker pull k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2

查看镜像是否拉取成功

docker images

拉取成功后,将我们的镜像打包保存为一个本地文件

docker save -o nfs-subdir-external-provisioner:v4.0.2.tar k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2

打包完成后我们会得到一个tar文件,这里为nfs-subdir-external-provisioner:v4.0.2.tar

至此云服务器的作用到此结束,我们通过XFTP或者其他工具将这个文件包下载到本地即可。

接下来我们开始将下载下来的镜像文件上传到我们需要部署的服务器上去,同样可以使用XFTP或者其他工具进行上传。

上传到我们自己的服务器上后,开始准备导入镜像,导入前请确认已经正确安装了Docker环境

docker load -i nfs-subdir-external-provisioner_v4.0.2.tar

至此我们的镜像就导入完毕了,使用docker images命令再次检查我们的镜像列表,已经可以看到我们之前无法拉取到的那个镜像了,跟直接docker pull下来是一样的,最后在每一台服务器上重复上述导入操作即可。

2、使用阿里云容器镜像服务+GitHub

上述第一种方法比较简单,但是需要购买第三方的服务器,如果没有特别合适的服务器的话可以采用第二种方法,使用阿里云容器镜像服务+GitHub仓库构建自己的镜像版本,可能稍微复杂一点,但是也很简单。

首先我们登陆GitHub创建一个自己的公有仓库,比如这边我就创建了一个叫做mirror的公开的空仓库

创建好仓库之后,按照个人的喜好开始准备创建对应Dockerfile,以下就按照原始镜像的全名创建对应的路径,便于使用和查找。例如,这边我们就在仓库的根目录创建了/k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner/v4.0.2文件夹,文件夹里只有一个Dockerfile文件,内容只有一句话,就是FROM+我们需要拉取的镜像名称,如下所示

FROM k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2

GitHub截图如下,也可以通过以下地址查看本文的实例:nfs-subdir-external-provisioner/v4.0.2/Dockerfile

GitHub的仓库创建完毕,并且提交了相应的Dockerfile文件之后,在GitHub上的操作就结束了。

接下来我们访问阿里云的容器镜像服务网站进行注册登陆:https://cr.console.aliyun.com

登陆成功后,自行选择创建个人或者企业实例

创建好实例之后,进入对应的实例,然后创建一个命名空间,根据自己的用途取一个名字

创建好命名空间之后,根据我们的需要任意选择一个地区,然后开始创建镜像仓库。选择我们刚才创建的命名空间,并且设置仓库的名称,也就是我们要下载的docker镜像的名称,最好与官方镜像保持一致

设置好仓库的基本信息之后,下一步就是要关联到我们刚才创建并提交了Dockerfile的GitHub仓库,注意一定要勾选海外机器构建,因为我们要拉取海外服务器的镜像

镜像创建完毕之后,我们进入构建页面,点击添加规则,选择我们刚才提交的代码分支,以及上下文目录和Dockerfile文件名,以及镜像版本号,建议版本号跟原始镜像保持一致,以免管理混乱。

规则添加完毕之后,我们就可以点击立即构建开始构建我们自己的docker镜像了

等待构建完成之后,进入基本信息页面,直接复制这个公有网址就可以进行镜像拉取了

在我们自己要部署的服务器上拉取镜像,记得加上我们之前打的版本号

docker pull registry.cn-beijing.aliyuncs.com/nosrc/nfs-subdir-external-provisioner:v4.0.2

输出结果如下

v4.0.2: Pulling from nosrc/nfs-subdir-external-provisioner
60775238382e: Pull complete
528677575c0b: Pull complete
Digest: sha256:374f80dde8bbd498b1083348dd076b8d8d9f9b35386a793f102d5deebe593626
Status: Downloaded newer image for registry.cn-beijing.aliyuncs.com/nosrc/nfs-subdir-external-provisioner:v4.0.2
registry.cn-beijing.aliyuncs.com/nosrc/nfs-subdir-external-provisioner:v4.0.2

再次使用docker images命令查看我们的本地镜像仓库

REPOSITORY                                                               TAG       IMAGE ID       CREATED         SIZE
registry.cn-beijing.aliyuncs.com/nosrc/nfs-subdir-external-provisioner v4.0.2 932b0bface75 12 months ago 43.8MB

这个时候我们可以直接使用我们自己的镜像进行部署了registry.cn-beijing.aliyuncs.com/nosrc/nfs-subdir-external-provisioner:v4.0.2

如果你对镜像的名称有强依赖的要求,那么可以使用以下命令创建一个新的标签,名称和标签名都和官方镜像的一样,注意第三个参数为docker images命令中输出的镜像的IMAGE ID,根据实际情况进行修改

docker tag 932b0bface75 k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2

操作完毕之后,再次使用docker images查看我们本地的镜像仓库,可以看到已经有了一个和官方镜像一样的本地镜像了,此时就可以当做官方的镜像正常使用了。

REPOSITORY                                                               TAG       IMAGE ID       CREATED         SIZE
k8s.gcr.io/sig-storage/nfs-subdir-external-provisioner v4.0.2 932b0bface75 12 months ago 43.8MB
registry.cn-beijing.aliyuncs.com/nosrc/nfs-subdir-external-provisioner v4.0.2 932b0bface75 12 months ago 43.8MB

无法下载外网Docker镜像的解决方案的更多相关文章

  1. golang包管理工具及环境管理工具;如何下载外网的依赖包

    简介: golang的包管理工具类似于java的maven.python的pip.js的npm,可以实现依赖包的统一管理:有很多:govendor.godep.glide,挑一个自己喜欢的用吧.mac ...

  2. golang module 下载外网资源失败解决办法

    用 golang 1.11 module 特性时,需要下载golang.org等外网地址的库文件 可以创建环境变量GOPROXY,使用Aliyun的镜像 go公共代理文档 简介 go module公共 ...

  3. 外网访问XAMPP失败 解决方案

    xampp 访问出现New XAMPP security concept 收藏 New XAMPP security concept: Access to the requested director ...

  4. 阿里云centos7成功安装和启动nginx,但是外网访问不了的解决方案

    问题环境: 阿里云centos7.4.1708 问题描述:成功配置,启动成功,外网访问不了 解决方案: 经过查阅文档,去阿里云后台查看,原来是新购的服务器都加入和实例安全组. (OMG)立即去配置.加 ...

  5. 使用 Docker 镜像构建 GO 语言环境

    1. 安装 Docker 我当前使用的系统环境是 CentOS7 ,安装 Docker 使用的命令是 yum install docker*.至于其它系统,可以到百度查找其对应的安装方式. 2. 配置 ...

  6. 慕课网--docker走进第一个javaweb应用

    zh docker镜像就是一系列文件的集合 docker 容器就是一个进程.将docker镜像运行起来就是一个docker容器 docker仓库就是存储docker镜像的 1.docker的安装 do ...

  7. (转)内网网站发布到外网-nat123动态公网IP动态域名解析

    环境描述: 路由器分配的是动态公网IP,且有路由器登录管理权限,网站服务器部署在路由器内部网络.如何将内网网站发布到外网大众访问? 解决方案: 内网使用nat123动态域名解析,将域名实时固定解析到路 ...

  8. ubuntu连有线网 无法连接外网

    问题:连上网线后,有ip,但是无法访问外网. 我的解决方案是: .通过命令行ifconfig命令查看以太网(即网线插口)的名称,如下图,'enp3s0'是网线插口(Ethernet以太网): zhum ...

  9. debian官网qcow2镜像修改root账号密码,开启ssh等

    1.下载官网qcow2镜像文件 wget http://172.16.20.10/vmtemplate/KVM/wangrui/Debian/debian-10.2.0-openstack-amd64 ...

  10. 使用 mysql 的 Docker 镜像

    使用 mysql 的 Docker 镜像 前言 之前搞了很多都是手工在操作系统的镜像中安装使用 mysql,作为自己折腾也就算了,作为实际使用实为不妥:Docker最重要的特性就是可扩展性,把各种程序 ...

随机推荐

  1. usbip:(一)初识

    USB/IP 总结   一.概要: USB/IP项目的目标是为用户提供通过网络远程访问usb设备的能力.在用户看来,访问usb设备和访问插入到本地电脑的设备没什么区别,该项目是开源的,可以用过适当的配 ...

  2. 记录 windows RabbitMq 安装教程

    安装地址:https://www.rabbitmq.com/ RabbitMq 官网下载如下两个exe文件,otp_win64_22.0.exe 文件是rabbitmq的运行环境,必须安装!!! 傻子 ...

  3. 用IDEA查看class字节码反编译后的文件——

    反编译 利用IDEA 进行反编译 查看class字节码反编译后的文件 1.要找到class文件,路径: IDEA没有显示完全,不过你可以点击右边这个,很容易就找到完整的路径. 2.找到这个路径并进入p ...

  4. 标记一下CF教育场的网址

    (因为太难翻了,做到哪里标到哪,自用 Educational Codeforces Round 1 Educational Codeforces Round 2 Educational Codefor ...

  5. 1.2 Defining Computer Architecture

    Genuine Computer Architecture: Designing the Organization and Hardware to Meet Goals and Functional ...

  6. redis面试题汇总

    1redis持久化机制 redis是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化,当redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的 2缓 ...

  7. uni-app中调用高德地图去设置点和轨迹

    盒子部分 <view style="width: 100%; height: 100%" id="busContainer"> </view& ...

  8. python 实现视频流下载保存MP4

    # -*- coding:utf-8 -*-import sysimport osfrom glob import globimport requests reload(sys)sys.setdefa ...

  9. STL练习-排列2

    Ray又对数字的列产生了兴趣: 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数. Input 每组数据占一行,代表四张卡片上的数字(0<=数字<=9 ...

  10. css 多行文本展开收起

    <template> <div class="content"> <div :class="[isOpen ? 'text' : 'text ...