如何解决带有卷安装容器的 Docker 群
我有一个 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
目录)。
这个问题似乎是 docker swarm 的常见问题,但我找不到直接的解决方案。 Some of the SO posts 建议使用共享卷,但尚不清楚如何为如此简单的用例实现此类共享卷。
另外,有没有共享卷的替代方案?任何参考将不胜感激。谢谢!
解决方法
Docker 本身只为一个卷挂载东西。它本身没有任何内置的文件共享机制。您指定的卷类型是绑定挂载,它只是将运行容器的主机上的目录挂载到该容器内的某个位置。有关一般 linux/unix 意义上的绑定安装的信息,请参阅 https://unix.stackexchange.com/questions/198590/what-is-a-bind-mount,有关 docker 特定种类的信息,请参阅 https://docs.docker.com/storage/bind-mounts/。
另一种挂载类型是 NFS。 https://stackoverflow.com/a/44825756/4930423 是一个很好地讨论这个问题的答案。
您也可以引入其他文件系统类型——cifs/samba 是另一种可能。
人们使用的另一种方法是使用主机的 /etc/fstab 使每个节点挂载一个 nfs/cifs/other 类型的共享目录,然后从那里使用 docker 绑定挂载。任何满足您的工作负载要求的文件共享技术都适用于这种设置——确保您的 io 足够高,并且所讨论的工作负载没有任何基本问题,因为远程访问类型的文件系统不可避免地会增加延迟。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。