docker导入导出镜像、容器,及启动容器失败的解决过程

 更新时间:2025年02月13日 10:07:32   作者:RQ-ghylls  
本文介绍了在内网环境下使用Docker进行应用程序部署时遇到的问题以及解决方案,主要通过Docker的镜像和容器导入导出功能,实现了在内网环境下成功部署应用程序,同时,还详细介绍了docker命令的使用方法,包括镜像的导出和导入、容器的导出和导入等

前言

随着容器技术的发展,现在很多的应用程序系统都会选择使用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'

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker实现挂载的方式汇总

    Docker实现挂载的方式汇总

    Docker实现挂载有多种方式,下面给大家分享Docker实现挂载常见方式,感兴趣的朋友跟随小编一起看看吧
    2023-11-11
  • Docker中使用Redis配置文件的详细指南

    Docker中使用Redis配置文件的详细指南

    在现代软件开发中,Redis 因其高性能和低延迟的特性,被广泛用作数据结构服务器和消息代理,Docker 作为一个轻量级的容器化平台,使得部署和管理 Redis 变得更加简单和高效,本文给大家介绍了Docker中使用Redis配置文件的详细指南,需要的朋友可以参考下
    2024-11-11
  • 如何解决docker logs无法实时输出脚本打印的内容

    如何解决docker logs无法实时输出脚本打印的内容

    这篇文章主要介绍了如何解决docker logs无法实时输出脚本打印的内容问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 聊聊docker 单机部署redis集群的问题

    聊聊docker 单机部署redis集群的问题

    这篇文章主要介绍了docker 单机部署redis集群,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • Docker 网络模式(四种)详细介绍

    Docker 网络模式(四种)详细介绍

    这篇文章主要介绍了Docker 网络模式详细介绍的相关资料,这里提供了四种网络模式的介绍,Docker 作为轻量级容器技术,很多比较不错的功能,网络不是多好,这里就整理下,需要的朋友可以参考下
    2016-11-11
  • 基于安装docker desktop失败的解决方案

    基于安装docker desktop失败的解决方案

    这篇文章主要介绍了基于安装docker desktop失败的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Docker添加tomcat容器无法访问首页解决方案

    Docker添加tomcat容器无法访问首页解决方案

    这篇文章主要介绍了Docker添加tomcat容器无法访问首页解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • docker环境下数据库的备份(postgresql, mysql) 实例代码

    docker环境下数据库的备份(postgresql, mysql) 实例代码

    这篇文章主要介绍了docker环境下数据库的备份(postgresql, mysql) ,需要的朋友可以参考下
    2019-05-05
  • Docker端口映射的实现

    Docker端口映射的实现

    这篇文章主要介绍了Docker端口映射的实现,详细的介绍了五种端口的映射方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Docker如何制作自己镜像并上传dockerhub

    Docker如何制作自己镜像并上传dockerhub

    这篇文章主要介绍了Docker如何制作自己镜像并上传dockerhub,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11

最新评论