开发者社区> 问答> 正文

Swarm mode 集群中数据卷管理的常见问题


如果用 数据卷名:镜像中已有目录 的方式使用第三方数据卷(如o1:/data,而镜像中有/data目录),启动容器会失败,系统会返回类似于 chown /mnt/acs_mnt/ossfs/XXXX: input/output error 的错误。
产生这个错误的原因是,对于命名数据卷,Docker 会把镜像中已有的文件复制到数据卷中,并用 chown 设置相应的用户权限,而 Linux 禁止对挂载点使用 chown。
您可以通过以下两种方法之一解决该问题:


  • 升级 Docker 到 1.11 或以上版本,升级 Agent 到最新版本并在编排模板中指定 nocopy 选项。Docker 会跳过复制数据的过程,因此不会产生 chown 错误。
    1. [backcolor=transparent]   volumes[backcolor=transparent] :
    2. [backcolor=transparent]    [backcolor=transparent]-[backcolor=transparent] o1[backcolor=transparent]:/[backcolor=transparent]data[backcolor=transparent]:[backcolor=transparent]nocopy
    3. [backcolor=transparent]    [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]/tmp:/[backcolor=transparent]bbb

  • 如果必须复制数据,您可以不使用数据卷名称,而使用挂载点路径进行设置,比如用/mnt/acs_mnt/ossfs/XXXX:/data。但这种方式绕开了 volume driver,在机器重启时,无法保证在 OSSFS 挂载成功之后再启动容器,可能会导致容器挂载了一个本地数据卷。为了避免这种情况,您需要同时使用两个数据卷,其中一个数据卷使用数据卷名称进行设置,另外一个数据卷使用挂载点路径进行设置。使用数据卷名称进行设置的数据卷只起到和 volume driver 同步的功能,并不用于存储。
    1. [backcolor=transparent]   volumes[backcolor=transparent] :
    2. [backcolor=transparent]    [backcolor=transparent]-[backcolor=transparent] o1[backcolor=transparent]:/[backcolor=transparent]nouse
    3. [backcolor=transparent]    [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]/mnt/[backcolor=transparent]acs_mnt[backcolor=transparent]/[backcolor=transparent]ossfs[backcolor=transparent]/[backcolor=transparent]XXXX[backcolor=transparent]:/[backcolor=transparent]data
    4. [backcolor=transparent]    [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]/tmp:/[backcolor=transparent]bbb

展开
收起
反向一觉 2017-10-30 15:37:48 1769 0
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
基于ACK One和ACR构建CI/CD流水线最佳实践 立即下载
基于Kubernetes实现弹性的CI/CD系统 立即下载
containerd: 镜像管理模块的优化 立即下载