Docker Swarm 上的 CIFS 类型卷写入权限问题

43次阅读
没有评论

问题描述

在使用 Docker Swarm 部署时遇到了一个关于 CIFS 类型卷的权限问题。他在本地使用 docker-compose 测试时,可以正常读写 CIFS 类型卷,但是当将相同的 docker-compose 文件部署到 Docker Swarm 服务器上时,虽然卷可以正确挂载,但无法进行写入操作,系统显示权限被拒绝。用户想知道是否有其他人也遇到过类似的问题。

解决方案

请注意以下操作可能会因 Docker 和 Docker Swarm 版本而异,建议在操作前备份数据。

最佳解决方案

在 Docker Swarm 中,CIFS 类型卷的权限问题可能与不同的用户标识(UID)和组标识(GID)之间的不匹配有关。为了解决这个问题,可以尝试在挂载 CIFS 卷时指定正确的 UID 和 GID。

以下是可能的解决步骤:

  1. 找到你的本地用户的 UID 和 GID。你可以通过运行以下命令来获取它们:
    bash
    id -u
    id -g
  2. 在你的 docker-compose.yml 文件中,修改 CIFS 卷的配置,添加 usergroup 选项,并将其值设置为你在步骤 1 中获取的 UID 和 GID。示例如下:
    yaml
    volumes:
    xxx_media:
    driver: local
    driver_opts:
    type: cifs
    device: //10.1.1.3\Company$$\xxx
    o: "user=service.it@xxx.it,password=$DISK_MOUNT_PASSWORD,rw"
    user: <your_UID>
    group: <your_GID>

    请将 <your_UID><your_GID> 替换为你实际获取的 UID 和 GID。

  3. 重新部署 Docker Swarm 栈。运行以下命令来重新创建栈:
    bash
    docker stack deploy -c docker-compose.yml <your_stack_name>

    请将 <your_stack_name> 替换为你的栈名称。

这种方法应该可以解决 CIFS 类型卷写入权限的问题。通过在挂载卷时指定正确的 UID 和 GID,可以确保容器内部的用户标识与宿主机上的用户标识匹配,从而解决权限问题。

备选解决方案

如果使用上述方法仍然无法解决权限问题,你可以尝试以下备选方案:

  1. 检查 CIFS 服务器的共享权限设置,确保容许写入操作。
  2. 确保在 docker-compose.yml 文件中的 o 选项中,用户和密码的值是正确的。
  3. 在 Swarm 中使用 docker secret 来管理敏感信息,避免在 docker-compose.yml 中直接暴露密码。

如果以上解决方案均无效,可能需要详细调查服务器和容器之间的权限配置,以确定问题的根本原因。

请注意,本文中提供的解决方案可能会因环境和版本差异而有所不同。在操作前请确保备份重要数据,并在实际操作中小心谨慎。

正文完