一、背景
在使用docker过程中,有时候创建容器时候没有设置挂载本地数据卷进行文件夹共享,但已经在容器中配置完了环境,此时再重新创建一个容器非常麻烦,因此需要对已有的容器挂载数据卷。
二、挂载原理
Docker中所有的容器的配置,如挂载点、运行方式等都是以json文件进行配置,修改对应的json文件参数即可挂载指定文件夹。
配置容器的json文件
/var/lib/docker/containers/<容器ID>/config.v2.json
/var/lib/docker/containers/<容器ID>/hostconfig.json
三、打开文件
使用
docker ps -a
拿到需要更改的container的12位ID,然后docker inspect id
,拿到64位ID(终端最上面的那个ID)停止所有container 并使用
service docker stop
关闭docker服务(必须关闭Docker服务,否则无法修改成功)到目录
/var/lib/docker/containers/<64位容器ID>/
中复制config.v2.json
和hostconfig.json
两个文件到任意不用root权限的目录下,同时对原文件进行备份。
4.在~/
下新建两个同名文件(避免权限问题)
cd ~/
touch config.v2.json hostconfig.json
5.新开一个终端,进入到容器目录下,打开文件
sudo -i
,提升权限
cd /var/lib/docker/containers/<64位容器ID>/
修改前一定要先备份下,否则改错了就GG!
cp config.v2.json config.v2.json.back
cp hostconfig.json hostconfig.back
使用gedit
打开文件,复制内容到~/
目录下的两个同名文件
gedit config.v2.json hostconfig.json
四、添加共享文件夹挂载信息
使用vscode
打开~/
目录下的这两个文件(不建议用gedit
,因为这个json文件是一行的,使用vscode
可以进行格式化,便于修改)
可以看到config.v2.json
文件用gedit
打开,内容没法看。
1.修改config.v2.json
文件
使用vscode
打开,ctrl+a
全选、右键format selection
,变成下面格式就容易修改。
在MountPoints
参数下按照相应的格式进行添加相应的字段,注意,必须是绝对路径,且不能是/root,必须是/root/的二级子目录。
2.修改hostconfig.json
文件
在hostconfig.json
文件中的Binds
参数添加宿主机和容器共享文件夹目录(注意,必须是绝对路径,且不能是/root,必须是/root/dataset这样的二级子目录)
使用vscode
打开,ctrl+a
全选、右键format selection
,变成下面格式就容易修改,Binds
参数添加宿主机和容器共享文件夹目录。
五、修改容器配置
把~/
目录下的config.v2.json
和hostconfig.json
两个文件内容,对应复制到以下文件中。
/var/lib/docker/containers/<容器ID>/config.v2.json
/var/lib/docker/containers/<容器ID>/hostconfig.json
六、启动docker 服务
service docker start
重要参考
linux 已经创建的容器container 如何挂载共享文件夹 如何更改端口 (docker)