容器的导出-导入
利用容器进行镜像的导出和导入
docker export 容器ID > xxx.tar
docker import xxx.tar > newXxx:y.y
通过docker ps -a查到一个redis的容器,通过如下命令导出该容器
docker export c41550a9cb0c > redis_container.tar
到另一台服务器导入
docker import redis_container.tar redis:6.2
可以成功导入,但是在docker run的时候会提示
docker: Error response from daemon: No command specified.
See 'docker run --help'.
或者
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "-d": executable file not found in $PATH: unknown.
exec:"-d"可能是任何一种你写的启动参数,总是就是带有OCI runtim $PATH的一种错误,在网上没有找到解决方案,但是大概了解了导致的原因:
export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作。
比如会丢失command,就是docker inspect 容器名
可以查到的
因为export-import删除了很多元数据,所以体积小,所以import时可以对镜像重命名,所以不能直接运行。。。?
镜像的保存-加载
直接基于镜像进行保存和加载,而不利用容器
docker save
docker load
比如通过docker images查到一个redis:6.2的镜像,就可以通过如下命令保存为tar文件
docker save -o redis_images.tar redis:6.2
到另一台服务器加载这个镜像
docker load < redis_images.tar
然后就能把redis运行起来了docker run -d --name redis62 -p 6379:6379 redis:6.2