4.docker导入导出镜像、容器,及启动容器失败解决方法【详细】

目录

前言:

1.docker镜像的导入和导出

1.1 docker镜像的导出

1.2 docker镜像的导入

2.docker容器的导入和导出

2.1 docker容器的导出

2.2 docker容器的导入

3. 总结

4.使用建议

5.遇到问题


前言:

随着容器技术的发展,现在很多的应用程序系统都会选择使用docker容器进行部署,但是有时候使用docker容器进行部署的时候会遇到问题,比如说我们的应用程序里面需要依赖其他第三方的镜像,如果这时候服务器是在内网不能连接外网的情况下,那么就无法部署了。基于这种情况,docker官方支持docker镜像和容器的导入和导出,我们可以在一台能够联网的机器上面编译镜像,然后导出镜像或者容器,最后把导出的镜像或者容器上传到内网服务器,然后再导入镜像或者容器,这样就可以了。

1.docker镜像的导入和导出

1.1 docker镜像的导出

  • 命令:
docker save [options] images [images……]
  • 使用命令:

    docker  save  -o  /home/dockeruser/lgr/epower.tar   镜像名称

     或

   docker save  >   /home/dockeruser/lgr/epower.tar    镜像名称

   例子:

docker save 192.162.100.92:5000/my_pro/front_dev:1.1 > /home/dockeruser/lgr/myprofrontdev.tar
  • 解释:

-o(即output)或>表示输出到文件; 

/home/dockeruser/lgr/epower.tar指定导出的位置路径,如果不指定路径,默认为当前文件夹;

  • 注意:

一般使用镜像名称来做导出。如果用 docker  save  -o  /home/dockeruser/lgr/epower.tar   镜像id 导出(即使用镜像id来做导出),后面再导入此镜像后,会发现镜像的名称和tag都是none,就还需要使用docker tag来重命名镜像了。

1.2 docker镜像的导入

首先需要使用xftp或其他工具将上面的.tar文件上传到需要导入镜像的服务器中。

  • 命令:
docker load [options]
  • 使用命令:

 docker  load  -i   epower.tar

 或

 docker  load   <  epower.tar

  例子:

docker load <  /usr/local/epower/lgr/myprofrontdev.tar
  • 解释:

-i(即input)或<表示从文件输入;

使用docker images命令可以查看是否导入成功,导入成功就可以根据镜像运行容器;

由于load命令不能对镜像重命名,我们可以使用docker tag 镜像id  镜像新名称:新tag 命令给镜像重命名;

2.docker容器的导入和导出

2.1 docker容器的导出

  • 命令:
docker export [options] container
  • 使用命令:

 docker export -o /home/dockeruser/lgr/econtainer.tar 0a64dafa5db9

  • 解释:

-o表示输出到文件;

/home/dockeruser/lgr/econtainer.tar指定导出的位置路径;

0a64dafa5db9为容器id;

2.2 docker容器的导入

首先需要使用xftp或其他工具将上面的.tar文件上传到需要导入镜像的服务器中。

  • 命令:
docker import [options] file|url| -[repository[:tag]]
  • 使用命令:

 docker  import  econtainer.tar  epower:latest 

  • 解释:

econtainer.tar表示导入的容器;

epower:latest表示给导入后的镜像进行重命名,latest表示给导入的镜像打tag;

使用docker images命令可以查看是否导入成功,导入成功就可以根据镜像运行容器;

3.总结

  • 镜像导入是一个复制的过程;容器的导入是将当前容器变成一个新的镜像
  • docker save命令保存的是镜像;docker export命令保存的是容器;
  • export命令导出的tar文件略小于save命令导出的;
  • export命令导出的是容器,export导出的文件在import导入时,无法保留镜像的所有历史(即每一层layer信息),也就不能进行回滚操作。而save命令导出的是镜像,所以导入时可以完整保留每一层layer信息。docker history 镜像id命令可以查询每一层layer信息。
  • load命令不能对镜像重命名;import命令可以对镜像重命名;

4.使用建议

如果只是为了备份镜像,则使用save和load命令;

如果在启动容器后,容器内容有变化之后需要备用,则使用export和import命令;

5.遇到问题

  • 问题:

在使用export命令导出容器,import导入为镜像后,使用命令

docker run -p 8812:8889 --name xxx -d 753  启动容器失败,

报错如下:

docker: Error response from daemon: No command specified.

See 'docker run --help'.

错误提示缺少明确的命令;

  • 解决方法: 

在导出容器的服务器使用docker ps --no-trunc命令查看具体的command,然后将command加入到启动命令最后即可。

 docker run -p 8812:8889 --name xxx -d 753 /bin/sh  -c 'java -Duser.timezone=Asia/Shanghai -cp /app/resources:/app/classes:/app/libs/* com.fp.epower.EpowerApplication'

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值