挂卷管理

功能描述

普通容器仅支持在创建时指定—volume参数将宿主机的目录/卷挂载到容器实现资源共享,但是无法在容器运行时将挂载到容器中的目录/卷卸载掉,也不支持将宿主机的目录/卷挂载到容器。系统容器可以通过isulad-tools工具实现动态将宿主机的目录/卷挂载到容器,以及将容器中的目录/卷进行卸载。

命令格式

  1. isulad-tools [COMMADN][OPTIONS] <container_id> [ARG...]

其中:

COMMAND:路由管理相关的命令。

OPTIONS:路由管理命令支持的选项。

container_id:容器id。

ARG:命令对应的参数。

接口说明

表 1

命令

功能说明

选项说明

参数说明

add-path

将宿主机文件/目录添加到容器中。

参数格式为:

hostpath:containerpath:permission [hostpath:containerpath:permission …]

其中:

hostdevice:卷在主机上的路径。

containerdevice:卷在容器中的路径。

permission:容器内对挂载路径的操作权限。

remove-path

将容器中的目录/文件删除,还原到宿主机中。

参数格式为:hostpath:containerpath [hostpath:containerpath …]

其中:

hostdevice:卷在主机上的路径。

containerdevice:卷在容器中的路径。

list-path

列出容器中所有的path目录。

支持的选项如下:

—pretty:按照json格式输出。

约束限制

  • 挂载目录(add-path)的时候必须要指定绝对路径。
  • 挂载目录(add-path)会在主机上生成/.sharedpath挂载点。
  • 最多可以向单个容器中添加128个volume,超过128后无法添加成功。
  • add-path不能将主机目录覆盖容器中的根目录目录(/),否则会造成功能影响。

使用示例

  • 启动一个系统容器,指定hook spec为isulad hook执行配置脚本:

    1. [root@localhost ~]# isula run -tid --hook-spec /etc/isulad-tools/hookspec.json --system-container --external-rootfs /root/root-fs none init
    2. e45970a522d1ea0e9cfe382c2b868d92e7b6a55be1dd239947dda1ee55f3c7f7
  • isulad-tools将宿主机某个目录挂载到容器,实现资源共享:

    1. [root@localhost ~]# isulad-tools add-path e45970a522d1 /home/test123:/home/test123
    2. Add path (/home/test123) to container(e45970a522d1,/home/test123) done.
  • 宿主机目录/home/test123创建一个文件,然后在容器内查看文件是否可以访问:

    1. [root@localhost ~]# echo "hello world" > /home/test123/helloworld
    2. [root@localhost ~]# isula exec e45970a522d1 bash
    3. [root@localhost /]# cat /home/test123/helloworld
    4. hello world
  • isulad-tools将挂载目录从容器内删除:

    1. [root@localhost ~]# isulad-tools remove-path e45970a522d1 /home/test123:/home/test123
    2. Remove path (/home/test123) from container(e45970a522d1,/home/test123) done
    3. [root@localhost ~]# isula exec e45970a522d1 bash
    4. [root@localhost /]# ls /home/test123/helloworld
    5. ls: cannot access '/home/test123/helloworld': No such file or directory