Docker Swarm如何实现卷共享?

2024-04-16

Docker Swarm 可以管理两种类型的存储:

volume and bind

While bindDocker 文档不建议这样做,因为它在本地目录(在每个 swarm 节点上)与任务之间创建了绑定,volume没有提到实现,所以我不明白任务之间如何共享卷?

  • Docker Swarm 如何在节点之间共享卷?
  • 卷保存在哪里(在管理器上?如果有多个管理器?)
  • 如果运行在不同网络的不同机器上,节点之间没有问题吗?
  • 它会创建 VPN 吗?

Swarm 模式本身不会对卷执行任何不同的操作,它会在运行容器的节点上运行您提供的任何卷安装命令。如果您的卷安装在该节点本地,那么您的数据将保存在该节点本地。没有内置功能可以在节点之间自动移动数据。

有一些基于软件的分布式存储解决方案,例如 GlusterFS、Rook、Ceph 和 Longhorn。其中许多都专注于与 Kubernetes 的集成,这在 Swarm 中没有帮助。

典型的结果是您要么需要管理应用程序中的存储复制(例如 etcd 和其他基于 raft 的算法),要么在外部存储系统上执行挂载(希望具有其自身的高可用性)。安装外部存储系统有两个选项:基于块或基于文件。基于块的存储(例如 EBS)通常具有更高的性能,但仅限于安装在单个节点上。为此,您通常需要第 3 方卷插件驱动程序来让您的 docker 节点访问该块存储。基于文件的存储(例如 EFS)性能较低,但更便携,并且可以同时安装在多个节点上,这对于复制服务很有用。

最常见的基于文件的网络存储是 NFS(这与 EFS 使用的协议相同)。您可以在没有任何第三方插件驱动程序的情况下安装它。不幸的是,docker 附带的名为“本地”卷插件驱动程序让您可以选择将任何您想要的值传递给带有驱动程序选项的 mount 命令,如果没有选项,它默认将卷存储在 docker 目录 /var/lib/ 中泊坞窗/卷。通过选项,您可以向其传递 NFS 参数,它甚至可以对 NFS 主机名执行 DNS 查找(通常 NFS 不具备这种功能)。以下是使用本地卷驱动程序挂载 NFS 文件系统的不同方法的示例:

  # create a reusable volume
  $ docker volume create --driver local \
      --opt type=nfs \
      --opt o=nfsvers=4,addr=192.168.1.1,rw \
      --opt device=:/path/to/dir \
      foo

  # or from the docker run command
  $ docker run -it --rm \
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=192.168.1.1\",volume-opt=device=:/host/path \
    foo

  # or to create a service
  $ docker service create \
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=192.168.1.1\",volume-opt=device=:/host/path \
    foo

  # inside a docker-compose file
  ...
  volumes:
    nfs-data:
      driver: local
      driver_opts:
        type: nfs
        o: nfsvers=4,addr=192.168.1.1,rw
        device: ":/path/to/dir"
  ...

如果您在最后使用撰写文件示例,请注意,只要现有命名卷存在,对卷的更改(例如更新服务器路径或地址)就不会反映在现有命名卷中。您需要重命名卷或将其删除,以允许 swarm 使用新值重新创建它。

我在大多数 NFS 使用中看到的另一个常见问题是在服务器上启用了“根南瓜”。当以 root 身份运行的容器尝试将文件写入卷时,这会导致权限问题。您还存在类似的 UID/GID 权限问题,其中容器 UID/GID 需要写入卷的权限,这可能需要在 NFS 服务器上调整目录所有权和权限。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker Swarm如何实现卷共享? 的相关文章

随机推荐

  • 运行编译的打字稿时未定义导出

    我正在尝试迈出使用打字稿的第一步 但在尝试运行我的应用程序时遇到了问题 我收到错误ReferenceError exports is not defined 我的代码非常简单 src changeset ts export enum Cha
  • 使用约束对 UIView 框架进行动画处理

    我在 UIView 中有一个元素 它有一个约束 规定它应该始终距离视图底部 10 像素 然后 我尝试为该视图的高度设置动画 使其看起来从屏幕上滑下 根据约束 元素应始终距视图底部 10 像素 当我像这样添加视图时 这是正确的 printVi
  • Clojure 中的相互递归定义

    如何在 Clojure 中进行相互递归定义 下面是 Scala 中使用递归定义查找素数的代码 val odds Stream Int cons 3 odds map 2 val primes Stream Int cons 2 odds f
  • 自定义 Jackson HttpMessageConverter 在 Spring 4.2 中不再工作

    我正在将应用程序从 Spring Platform 版本 1 1 3 RELEASE 更新到 2 0 1 RELEASE 这会将 Spring Framework 版本从 4 1 7 升级到 4 2 4 将 Jackson 从 2 4 6
  • 还有人在初始化 Cloud Engine 时遇到“未知错误”吗?

    我正在尝试使用他们最近发布的 启动器 在 Google 云平台上启动 Discourse 实例 https cloud google com launcher details bitnami launchpad discourse q di
  • Webpack突然崩溃了

    一周前 它运行良好 现在 没有任何更改 相同的电脑和完全相同的文件 与存储库没有差异 之后npm install它不再工作并崩溃并出现以下错误 user machine workspace work project npm run buil
  • 使用 lubridate 和 mutate 将日期格式从 %y-%m-%d %h:%m:%s 更改为 %Y%M%D

    我有一个tbl df有两列开始时间 and StopTime 两者都是dttm 我想改变它的格式 y m d h m s to y m d 我试过了 data lt mutate data StartTime ymd StartTime S
  • jquery focusout事件缺少相关目标信息

    我有一个绑定到的文本输入focusin focusout events element focusin function e focusout function e var to e relatedTarget e toElement un
  • 将视频嵌入到从应用程序的 Documents 文件夹加载到 UIWebView 中的 html 文件中

    我有一个名为的 html 文件videoplay html包含以下内容 p This is demo html file for playing movie file embedded p p p
  • 使用 pandas 将字符串列更改为多个布尔列

    我有一个两列的数据集 我想对其进行重塑 看看这个假的 df df pd DataFrame Alex Apple Bob Banana Clark Citrus Diana Banana Elisa Apple Frida Citrus G
  • PHP登录将密码存储在txt中[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 现在 我知道将密码存储在文本文件中并不安全 但不用担心 安全不是我的目标 这就像那些 hackme 网站之一 所以 我需要知道 如何将
  • 如何测试 sbt 解析器

    在我的本地计算机上 我有一个常春藤缓存 该缓存已通过处理多个项目而被填充 图书馆X使用解析器加载Y在项目中A 同一个图书馆X项目中使用的B 解析这个库没有问题 因为它在我的本地缓存中 当我的一位同事加载项目时B他得到了图书馆的错误X无法解决
  • 使用 SQL 查找给定 x、y 坐标的填充矩形

    给定以下填充的 x y 坐标 0 0 0 1 0 2 1 0 1 1 1 2 2 0 2 1 2 2 4 0 4 1 5 0 5 1 如何编写 SQL 查询来确定所有填充的矩形 矩形由其左上角和右下角定义 期望的结果 x1 y1 x2 y2
  • UWP StoreProductQueryResult 不返回任何产品

    我们无法返回 Windows 应用商店应用程序的附加产品列表 我们在 Windows 应用商店中有一个包含 3 个订阅附加组件的应用程序 这些附加组件被标记为隐藏 因为我们不希望它们只能通过我们的应用程序在商店中可见 我们正在开发针对 Wi
  • 通过键盘快捷键重新缩进 XML

    我正在浏览数百个 xml 文件 当我在记事本 中打开它们时 我必须对每个文件执行 HTML Tidy gt re indent XML 对于一个文件来说 这一步骤并不会花费太长的时间 但是加起来就会产生很多很多的文件 有没有办法将其放在记事
  • Linux 上的 mpc / mpd:如何播放本地 wav 文件

    我正在尝试将本地文件添加到 mpd 通过 mpc 并播放它 我的平台是OpenWRT嵌入式linux 因此 从手册页来看 它指出 mpc add
  • 如何将 .sql 文件的内容读入 R 脚本以运行查询?

    我已经尝试过readLines和read csv功能 但随后不起作用 以下是该内容的内容my script sql file SELECT EmployeeID FirstName LastName HireDate City FROM E
  • Node Express 中的 res.sendfile 并传递数据

    有没有办法从 Node JS 应用程序重定向到 HTML 文件 例如 res sendFile http expressjs com api html res sendFileExpress 并将 JSON 数据传递到 html 文件 我知
  • Bash 子 shell:括号:() VS 美元括号:$()

    在 bash 中 两者 and 创建一个子shell 彼此之间有什么区别 它们的典型用途是什么 只是创建一个复合命令 运行括号内的命令 做同样的事情 但也替换输出 来自文档 list list在子shell环境中执行 变量赋值和内置 影响
  • Docker Swarm如何实现卷共享?

    Docker Swarm 可以管理两种类型的存储 volume and bind While bindDocker 文档不建议这样做 因为它在本地目录 在每个 swarm 节点上 与任务之间创建了绑定 volume没有提到实现 所以我不明白