Docker组合“缩放”命令不是跨多台机器进行扩展

我有一个2台机器群集。 我已经从这里安装了一个简单的Docker组合演示。 但是,当我尝试使用docker-compose scale web=5命令扩展应用程序时,它只能扩展到当前机器,并且不会像预期的那样在群集中的另一台机器上创build任何新的Web容器。

在其他人看到的每一个例子中,他们的scale命令都起作用了,没有提到需要额外的configuration让它在多个节点间扩展。

不知道还有什么要尝试。 从任一台机器运行scale命令时,得到相同的结果

请让我知道我可以提供什么进一步的信息。

我看到现在有两个问题导致我的缩放命令失败,但是,即使正确的多主机networking设置,它仍然无法正常工作。

在从同一个撰写应用程序中的另一个容器链接的撰写应用程序中缩放容器时 – 这是因为我使用已弃用(?)“链接”function而不是使用新的多主机networkingfunction来join容器。 显然,“链接”只能在一台机器上运行,不能在多台机器上进行缩放。 (我相当确定是这样,但可能是错的)

试图缩放未链接的容器时 – 实际上按预期工作。 我忘了我有其他容器在机器上运行,我期待Docker扩展我的容器。 因此,由于当前机器利用率最低,所以Swarm调度器将新缩放的容器放到当前机器上。 (这是在一个2机群组)

编辑 – 实际的解决scheme

好吧,看起来最后的问题是我无法缩放使用build创build其图像的撰写应用程序的一部分,而不是使用image指定image

我想这是有道理的,因为它正在试图扩展容器的机器没有可用的构build文件来创build该映像,但我已经认为Docker Compose / Swarm将足够聪明来解决这个问题,并以某种方式将其复制到机器上。

所以解决方法是事先用Docker build图像,然后将该图像推送到公共Docker Hub或您自己的私有注册中心,并让Docker组合文件用image指定该图像,而不是尝试使用build来创build该image

有一件事你可以做的是标签的Web容器(如com.mydomain.myapp.category=web ),并为标签(例如affinity:com.mydomain.myapp.category!=~web )。 这将告诉Swarm尝试使用com.mydomain.myapp.category=web安排另一个容器,该容器不首先容器容器(但如果没有,则安排已经容纳该容器的容器)。

该存储库中修改后的Docker Compose文件将如下所示:

 web: build: . volumes: - .:/code links: - redis expose: - "5000" environment: - "affinity:com.mydomain.myapp.category!=~web" labels: - "com.mydomain.myapp.category=web" redis: image: redis lb: image: tutum/haproxy links: - web ports: - "80:80" environment: - BACKEND_PORT=5000 - BALANCE=roundrobin