在docker上运行joomla中发生的突发事件 原
公司的项目需要走虚拟化的方式,所以就将joomla项目逐步的迁移到docker中。部署环境的问题以前都是其他同事搞定的,我只负责代码部分,这一次心血来潮,想自己弄,结果一天的工作都被一行docker rm 给弄没了,教训惨重,特以此为戒。
事件原由
对于joomla已经很熟悉,对于docker,之前了解过,基本上就把他当做一个轻量级的虚拟机来用,感觉这个理解对我来说是够用的。实际上操作docker我的经验也没有到1个月。
在本次事件中,我把joomla的代码和数据库都放在一个docker容器中,这样不需要另外再配置额外的数据库,只需要启动docker 容器,就可以跑起一个joomlal了。对于不熟悉joomla,但会一点docker的朋友来说,这种方式非常的方便。在快下班的时候,启动另外一个docker容器的时候提示端口被占用了,而这个端口就是我运行joomla的那个容器在使用中。 当时脑袋还算清醒,就认为关掉joomla这个容器就可以解决问题,可能是我对docker理解不深刻,潜意识就把这个任务和linux关掉一个进程是一样的,然后我就是执行了docker rm joomla 这个命令。 当时没有认识到问题的严重性,认为换一个端口,重新跑一个容器就行了,但实际上发现新的容器内容完全被清空了,我一天的工作都白做了。
在接下来的两个小时,搜索能否恢复被删除的容器数据,虽然网上有类似的教程,但实际上这种操作成功的可能性不大,我只能在docker的volum目录下找到一些上传的附件,但其他的数据库文件是完全找不到的。
错误原因
对docker的操作不熟悉,对一些关键的命令理解不透彻。
解决方案
通过上面的事情,也向我暴露了一个问题,docker 容器太容易删除了,这是非常非常危险的信号,在使用docker的时候一定要注意。
docker对这种情况也提供了解决方案,那就是挂载。在允许docker容器的时候,我们应该将一些数据库文件,配置目录,关键的目录挂载到本地宿主机上,这样即使不小心删除掉了容器。也还是可以恢复的。