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

Ash*_*ple 2 docker docker-compose docker-swarm

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

但是,似乎链接的容器被约束为驻留在同一节点上,因此在多个节点上设置Docker Swarm不会导致我要寻找的容器分发。

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

mor*_*rxa 5

不推荐使用链接。相反,您可以创建一个新网络并将所有容器添加到该网络:

$ docker network create myapp
Run Code Online (Sandbox Code Playgroud)

请注意,根据Compose网络文档,将为您的撰写文件自动创建这样的网络。

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

还可以查看“ 使用Swarm合成 ”的一些限制。