新增挂载目录
#ln -s 不支持符号链接
mount --bind /宿主目录 $(docker inspect -f {{.GraphDriver.Data.MergedDir}} ${containerid})/具体目录
mount —bind命令说明: Linux将会把被挂载目录的目录项(也就是该目录文件的block,记录了下级目录的信息)屏蔽,在本例里就是 $(docker inspect -f {{.GraphDriver.Data.MergedDir}} ${containerid})/具体目录 的下级路径被隐藏起来了(注意,只是隐藏不是删除,数据都没有改变,只是访问不到了) mount命令执行时,VFS会创建一个vfsmount对象,这个对象里包含了整个文件系统所有的mount信息,其中也会包括本次mount中的信息,这个对象是一个HASH值对应表(HASH值通过对路径字符串的计算得来),表里就有 /宿主目录 到 $(docker inspect -f {{.GraphDriver.Data.MergedDir}} ${containerid})/具体目录 的HASH值对应关系 命令执行完后,当访问 / $(docker inspect -f {{.GraphDriver.Data.MergedDir}} ${containerid})/具体目录 下的文件时,系统会告知 $(docker inspect -f {{.GraphDriver.Data.MergedDir}} ${containerid})/具体目录 的目录项被屏蔽掉了,自动转到内存里找VFS,通过vfsmount了解到 $(docker inspect -f {{.GraphDriver.Data.MergedDir}} ${containerid})/具体目录 和 /宿主目录 的对应关系,从而读取到 /宿主目录 的inode,这样在 $(docker inspect -f {{.GraphDriver.Data.MergedDir}} ${containerid})/具体目录 下读到的全是 /宿主目录 目录下的文件 ———————————————— 参考链接:https://blog.csdn.net/shengxia1999/article/details/52060354 参考链接:https://blog.csdn.net/wuruixn/article/details/9619127
两个目录的对应关系存在于内存里,一旦重启挂载关系就不存在了 所以开机就重新挂载
vim /etc/fstab
/宿主目录/ $(docker inspect -f {{.GraphDriver.Data.MergedDir}} ${containerid})/具体目录 none rw,bind 0 0
```
<a name="Rdb8B"></a>
### 修改挂载目录
修改挂载目录配置文件
```bash
systemctl stop docker.service #先停掉docker服务
vim /var/lib/docker/containers/${containerid}/config.v2.json #输入/ 查到目标目录字符 修改
vim /var/lib/docker/containers/${containerid}/hostconfig.json #同上
systemctl start docker.service
commit成新镜像再运行
docker commit ${containerid} new_image:tag
docker run ... #新增或者修改挂载目录再运行新镜像
export再import成新镜像再运行
docker ${containerid} export -o ./myimage.docker 容器ID
docker import ./myimage.docker new_image
docker run ... #新增或者修改挂载目录再运行新镜像
comit与import的区别
将docker import理解为将外部文件复制进来形成只有一层文件系统的镜像,而docker commit则是将当前的改动提交为一层文件系统,然后叠加到原有镜像之上。docker import丢失了历史信息得到的镜像文件要比docker commit得到的镜像文件要小。