Docker Swarm + Docker撰写:在不同的节点上运行链接容器?

我有一个应用程序,我目前通过Docker Compose文件在单个主机上运行。 容器通过一个RabbitMQ容器相互通信(所以它们都链接在一起)。 该应用程序开始需要更多的资源比我的单一主机能够提供,所以我认为,Docker Swarm将是理想的,因为我应该能够通过相同的Compose文件,但在分布式节点上旋转相同的一组容器。

但是,看起来链接的容器被限制在同一个节点上,所以在多个节点上设置Docker Swarm将不会导致我正在查找的容器分布。

大使模式似乎是分离链接容器的推荐方式(通过为每个节点上的链接容器设置代理),但是我在使用docker-compose文件时遇到了麻烦,因为我看过的示例显示设置然后使用运行共享服务的节点的IP(在我的情况下是RMQ)设置一个环境variables来告诉客户端的大使容器在哪里为链接的服务路由数据(如https:// docs.docker.com/engine/admin/ambassador_pattern_linking/ )。 如何将其转换为Compose文件,以便我不需要知道该服务将在哪个IP上运行(因为Docker Swarm将在Compose文件完成后决定这个)?

使用链接已被弃用 。 相反,您可以创build一个新的networking ,并将所有容器添加到该networking:

$ docker network create myapp 

请注意,根据Compose的Networking文档 ,这样的networking是为撰写文件自动创build的。

这意味着您根本不需要设置任何链接或networking,因为Compose已经自动创build了一个networking,并且所有容器都应该使用其容器名称在该networking中可访问。

另外看看使用与Swarm组合的一些限制。