开发者社区> 问答> 正文

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


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

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


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


展开
收起
青蛙跳 2018-08-31 22:23:29 1224 0
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载