Docker 将多个容器放在一起的 Swarm 约束?

Docker Swarm constraint to keep multiple containers together?

我有三个容器需要在同一个 Swarm node/host 上 运行 才能访问相同的数据量。我不在乎他们被委派给哪个主机 - 因为它在 Elastic AWS 实例上 运行ning,所以他们会在我不知情的情况下上下波动。

最后一个事实让它变得棘手,尽管它看起来应该相当普遍。是否有允许这样做的放置限制?显然 node.id 或 node.hostname 不存在,因为它们不是常数。我想到了标签 - 这会起作用,但后来我不知道如何让 "replacement" AWS 实例自动获取标签。

Swarm 还没有将容器放在同一主机上的功能(根据您不使用 ID 或主机名的要求)。这在 Kubernetes 中被称为 "Pods"。 Docker Swarm 采用更加分布式的方法。您可以尝试在新实例启动时将标签分配组合在一起,但这并不理想。

在 Swarm 中,今天解决此问题的方法是使用不同的卷驱动程序插件,然后使用 built-in "local" 驱动程序。 Here's a list of certified ones。 Swarm 的关键是不要将节点上的本地存储用于卷。这些卷无论如何都会在节点死亡时丢失,因此最好在 Swarm 中将您的卷移动到共享存储。

在 AWS 中,如果您需要多个容器同时访问它,我建议您尝试将 EFS 作为共享存储,并使用 Docker 的 CloudStor 驱动程序(附带 Docker for AWS template) or the REX-Ray storage orchestrator 解决方案确保共享数据路径(NFS、EFS、S3 等)连接到正确的服务任务的正确节点。