我有三个容器需要在同一个Swarm节点/主机上运行才能访问相同的数据卷。我不关心他们被委派给哪个主机 - 因为它在Elastic AWS实例上运行,它们会在我不知情的情况下上下。
这最后一个事实让它变得棘手,尽管它看起来应该相当普遍。是否有允许这样的放置约束?显然node.id或node.hostname是out,因为它们不是常量。我想到了标签 - 这可行,但后来我不知道如何让“替换”AWS实例自动获得标签。
答案 0 :(得分:0)
Swarm没有将容器放在同一主机上的功能(根据您的要求不使用ID或主机名)。这被称为" Pods"在Kubernetes。 Docker Swarm采用更加分散的方法。您可以尝试在新实例启动时破解标签分配,但这并不理想。
在Swarm中,今天解决这个问题的方法是使用不同的卷驱动程序插件,然后使用内置的" local"驱动程序。 Here's a list of certified ones。 Swarm中的关键是不在节点上使用卷的本地存储。无论如何,当节点死亡时,这些卷都会丢失,因此在Swarm中将卷移动到共享存储是最好的。
在AWS中,如果您需要多个容器一次访问它,并建议使用Docker的CloudStor驱动程序(随Docker for AWS template提供)或{ {3}}解决方案,确保共享数据路径(NFS,EFS,S3等)连接到正确的服务任务的正确节点。