需求场景
- 有一台服务器,因为安全方面的原因,是不允许访问互联网的,上面安装了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下有这样的方式
- 在能上网或者顺方访问国外docker服务的服务器上,使用docker save命令,将需要的镜像保存为本地文件
- 把保存好的本地文件,复制到不能连接互联网的服务器(目标服务器)上(不管你用什么方式,例如VPN,优盘等等)
- 在目标服务器上,使用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命令查看:
文章评论