引言:有时候我们的环境无法连接公网,且内网无镜像仓库或镜像仓库不存在该镜像,这种情况我们可以从其他环境导入该镜像。
目标:将A机器的某一个镜像导入到B机器
在A机器(可联网),先将镜像pull到本机下来,然后Save
docker pull xxxx.com/blang/alpine-bash:3.8
docker save -o alpine-bash3.8.tar xxx.com/blang/alpine-bash:3.8
然后下载该 alpine-bash3.8.tar文件,再上传该文件到B机器的某一个目录。
B机器执行如下命令,导入镜像。
docker load -i alpine-bash3.8.tar
导入后 docker images 看到这个镜像还是原域名xxxx.com:
此时我们已经可以根据该镜像创建容器了。
下面步骤可选
如果内部搭建了私有仓库,我们需要自行打标签,然后我们才能导入到私有仓库
docker tag hub.xxxx.com/blang/alpine-bash:3.8 192.168.101.101:30083/apollo/alpine-bash:3.8 #192.168.101.101:30083是我们自己镜像仓库的地址。
docker push 192.168.101.101:30083/apollo/alpine-bash:3.8
docker push时可能遇到两个问题:
docker push时可能会提示两个错误:
1.Get https://xxxxx/v2/: dial tcp 122.112.162.138:443: connect: connection refused
如果你的仓库没有启用https,那么需要修改/etc/docker/daemon.json,将你的域名或IP添加到insecure-registries中,这样就会默认对你的域名走http协议,如
"insecure-registries": ["hub.xxxx.cn","192.168.0.230:8081"]
2.提示:unauthorized: access to the requested resource is not authorized
这说明你的服务器没有权限往仓库上传,你需要在linux中登录下仓库
docker login hub.xxxx.com
输入仓库的帐户及密码,再次push通常就成功了。
**补充说明**
离线环境镜像保存与导入有两种(save/load或export:import)
【save】操作镜像,是保存一个完整的镜像,包含分层系统统一打包;【export】操作容器,是导出容器当前的操作系统,不包含分层系统,仅包含当前系统中的状态。
docker save保存的是镜像(image),docker export保存的是容器(container);
docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
网友评论