【问题标题】:Docker swarm with volume mounted container带有卷装容器的 Docker swarm
【发布时间】:2023-03-15 18:48:01
【问题描述】:

我有一个 docker 容器,它的卷与主机卷一起安装。这是它的 docker-compose 服务:

  core:
    image: index.docker.io/kaushal/demo_img
    volumes:
      - ./data/custom:/opt/custom:z

这里./data/custom 是主机目录,它在容器中使用/opt/custom 目录挂载。现在,为了实现高可用性,我想在不同的节点上使用 docker swarm 运行这个容器的多个副本。

当我启动 swarm 时,它总是显示 0/2 副本。原因在这里突出显示:https://stackoverflow.com/a/56707801/5353128(tl;dr 因为我在其他 swarm 节点中没有./data/custom dir)。

这个问题似乎是 docker swarm 的常见问题,但我找不到直接的解决方案。 Some of the SO posts 建议使用共享卷,但不清楚如何为这样一个简单的用例实现这样的共享卷。

另外,是否有任何替代共享卷的方法?任何参考将不胜感激。谢谢!

【问题讨论】:

  • 在链接的问题上,我提供了使用 NFS 执行此操作的命令列表,并解释了该行为的原因。您是否要求没有外部卷的 HA?当节点出现故障时,您希望数据在哪里?

标签: docker docker-compose docker-swarm high-availability docker-volume


【解决方案1】:

Docker 本身只为一个卷挂载东西。它本身没有内置任何类型的文件共享机制。您指定的卷类型是绑定挂载,它只是将运行容器的主机上的目录挂载到该容器内的某个位置。请参阅https://unix.stackexchange.com/questions/198590/what-is-a-bind-mount 了解通用 linux/unix 意义上的绑定挂载的信息,以及 docker 特定种类的https://docs.docker.com/storage/bind-mounts/

另一种挂载类型是 NFS。 https://stackoverflow.com/a/44825756/4930423 是一个很好地讨论了这一点的答案。

您也可以引入其他文件系统类型——cifs/samba 是另一种可能性。

人们使用的另一种方法是让每个节点使用主机的 /etc/fstab 挂载一个 nfs/cifs/other 类型的共享目录,然后从那里使用 docker bind mount。任何满足您的工作负载要求的文件共享技术都可以使用此设置——确保您的 io 足够高,并且所讨论的工作负载没有任何基本问题,因为远程访问类型的文件系统不可避免地会增加延迟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    相关资源
    最近更新 更多