Docker复制镜像到不能上网的电脑(导出和导入镜像文件)

2021-12-31 788点热度 0人点赞 0条评论

需求场景

  • 有一台服务器,因为安全方面的原因,是不允许访问互联网的,上面安装了docker服务,不过在获取镜像的时候,就遇到问题,无法连接互联网来拉取image。
  • 另外一种情况,有一些docker镜像只有国外的镜像服务器上有,虽然我们修改一些配置,让docker来拉取国内的镜像(详见:https://blog.terrynow.com/2021/12/24/docker-set-registry-mirrors-to-speed-up-pull/),还是没有办法(例如registry-1.docker.io什么timeout等等各种错误)

解决方案

核心思路我们可以这样做:

找一台能上网,甚至是能顺畅访问国外docker registry的服务器(例如国外的VPS),把镜像下载下来,然后复制到不能联网的服务器上。

docker下有这样的方式

  1. 在能上网或者顺方访问国外docker服务的服务器上,使用docker save命令,将需要的镜像保存为本地文件
  2. 把保存好的本地文件,复制到不能连接互联网的服务器(目标服务器)上(不管你用什么方式,例如VPN,优盘等等)
  3. 在目标服务器上,使用docker load命令,把文件导入成镜像,接下来你就可以使用docker run等创建容器了

将镜像保存为本地文件,使用docker save命令

命令格式:

docker save -o 要保存的文件名 要保存的镜像

# 以redis为例,拉取redis的镜像
docker pull redis:latest

# 查看images是否就位
docker images

# 保存redis镜像为文件到 /opt/redis.tar
docker save -o /opt/redis.tar redis

# 把 /opt/redis.tar 复制到目标服务器省略。。。

从文件载入镜像

从文件载入镜像使用docker load命令

命令格式:

docker load --input 文件路径
或者

docker load < 文件路径

# 把之前导出的镜像文件加载进images
docker load --input < /opt/redis.tar

# 导入后,再查看images,应该会多一个,看到imageId
docker images

# docker run的时候,后面最好用imageId, 不要用名字
docker run --restart=always [其他参数省略] [imageId]

 

导入后可以使用docker images命令查看:

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论