一、问题
从网络上下载的很多Dockerfile或docker-compose文件进行启动容器的时候,部分重要的目录是依赖volumes挂载到容器内部的,如图
这就会出现一个问题,当我们想将容器打包,便于以后使用的时候,这部分挂载的文件是没有办法打包进去的,迁移到其他地方就会出现容器不可用,那么给大家介绍一个方法。
二、解决方案
当遇到这种情况,一般来讲,我们的思路都是去重写Dockerfile,将本该挂载到容器的文件,以COPY的形式放到容器里,这样便从根源上解决了这个问题。但是,当遇到Dockerfile拉不起容器的时候(哈哈哈哈,我就是这种情况,之前能用Dcokerfile拉起容器,后面就不行了,很头疼),我们就不得不从已经启动的容器上入手。
接下来介绍方法:
tips:原本的挂载目录是:/usr/local/apache2/htdocs/
1、首先,现在容器里创建一个目录,目录名字随意
我在原本挂载目录的同级目录下创建了一个bak文件。
然后,退出容器,要记住容器id。
2、停止docker服务
停止docker服务: service docker stop (或 systemctl stop docker)
验证服务是否运行: docker ps -a
3、修改容器配置文件
找到如下目录:
/var/lib/docker/containers/
在该目录下,存放着当前主机上运行的所有docker容器的信息,每个文件夹以docker容器id命名。
4、进入到需要修改的容器id目录下
5、修改config.v2.json文件
将上图所标注的3个位置,修改为一个新的目录:如:/usr/local/apache2/bak
修改后,保存
5、启动docker服务
启动docker服务: service docker start (或 systemctl start docker)
验证服务是否运行: docker ps -a
6、docker start 容器id,启动容器,重新将所需文件,使用docker cp拷贝到容器指定位置
7、将容器重新提交成镜像,使用新镜像再次启动容器,该问题即可解决。