在一次生产环境 docker 微服务更新 中 深刻意识到docker save 和 export 的区别

0x00 背景

上次使用虚拟机镜像部署了三个子系统,但是测试过程中还是发现了不少问题,所以这次需要过去更新几个微服务

于是就在公司虚拟机里面用export命令把几个容器导出来,放到生产环境中再import进去,然后run,结果死活运行不起来,提示run缺少参数。为了防止这种情况,我还把公司测试环境中的完整的容器启动命令都拍了下来,然后尝试构造命令,没有参数是吧,我用inspect命令把参数都找出来。接下来参数是不缺了,就是提示在工作目录中找不到文件。

0x01 分析:

在公司里面的容器,我是直接通过2375端口直接上传到docker镜像库的,在上传完毕后,还会执行dockerfile里面的命令,其中包含创建工作目录等命令。但是我将容器导入生产环境后,似乎是因为没有运行这些命令而造成找不到文件。

那么就可以推理出,我只是将docker的容器导出来了,但是容器里面的数据却没有导出。

怎样才能连同数据一起导出呢,那么就要用到save命令而不是export命令了。

0x02 解决:

最后只能让同事再帮忙将这几个微服务的容器重新导出一下

然后我这边再使用load命令将容器加载为镜像,微服务才得以成功更新。