把外网服务器上的docker搬到内网使用时,报了两个错误,外网容器到tar包都没有问题,在内网使用tar包的时候报了两个错误
cannot connect to the Docker daemon at is the docker daemon running
starting cantainer process caused:"exec:"/bin/sh":stat /bin/sh: no such file or diretory
发现是tar包到镜像的问题,我用的命令是
docker load --input xxx.tar
正确的是
docker load < xxx.tar
以下总结整个docker打包搬运流程如下:
1.将容器变为镜像 container -> image
docker commit a6364a8891bf test
可用参数
-a:提交的镜像作者;
-c:使用Dockerfile指令来闯将镜像;
-m:提交时时的说明文字;
-p:在commit时候,将容器暂停。
test是新建的镜像的名字
a6364a8891bf是将要打包的镜像
2.将镜像打包成tar包
docker save -o xxx.tar test # 当前路径下会生成一个xxx.tar
docker save -o test.tar test # 举例
3.将tar包再次压缩为gz包
tar zcvf test.tar.gz test.tar # 当前路径下生成一个test.tar.gz压缩包
4.将tar.gz移动到内网服务器
5.将tar.gz解压缩会生成一个tar包
tar -zxvf test.tar.gz
6.将tar包生成镜像
docker load < test.tar # 生成的镜像(image)跟之前打包的镜像名称一样
7.将镜像生成容器
docker run -it --name 容器名称 镜像名称 /bin/bash
docker load 和 docker import 的区别
docker load
导入镜像库存储文件到本地镜像库;镜像存储文件将保存完整记录,体积也会更大
docker import
导入一个容器快照到本地镜像库。容器快照将会丢弃所有的历史记录和元数据信息,
docker save 和 docker export 的区别
docker save images_name :将一个镜像导出为文件,再使用docker load命令将文件导入为一个镜像,会保存该镜像的所有历史记录。
比docker export命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。
docker export cotainer_id:将一个容器导出为文件,再使用docker import 命令将容器导入成为一个新的镜像。
但是相比docker save 命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照
参考文档: