我有一个2机器群集群。我在其中一台机器上安装了here的简单Docker组合演示。但是,当我尝试使用docker-compose scale web=5
命令扩展应用程序时,它只会扩展到当前计算机,并且不会按预期在群集群集中的其他计算机上创建任何新的Web容器。
在其他人看到的每个例子中,他们的scale
命令正常工作,并且没有提及所需的其他配置,无法在多个节点上进行扩展。
不确定还有什么可以尝试。从任一机器运行scale命令时,我得到相同的结果
请告诉我我可以提供的更多信息。
答案 0 :(得分:2)
我现在看到有两个问题导致我的缩放命令失败,但是,即使使用正确的多主机网络设置,它仍然无法正常工作。
从同一个撰写应用程序中链接到另一个容器的撰写应用程序缩放容器时 - 这是失败的,因为我使用不推荐的(?)“链接”功能加入容器而不是而不是使用新的multi-host networking功能。显然,“链接”只能在一台机器上运行,不能跨多台机器进行扩展。 (我很确定这种情况,但可能是错误的)
尝试扩展未关联的容器时 - 这实际上是按预期工作的。我忘了我在机器上运行了其他容器我期待Docker将我的容器扩展到。因此,Swarm调度程序只是将新缩放的容器放到当前机器上,因为当前机器的利用率最低。 (这是在2机器群集中)
编辑 - 实际解决方案
好的,看起来最后一个问题是我无法缩放使用build
创建图像的撰写应用程序部分,而不是使用image
指定图像。
我认为这是有道理的,因为它试图扩展该容器的机器没有可用于创建该图像的构建文件但是我假设Docker Compose / Swarm将足够聪明地计算出来并以某种方式复制跨越机器。
因此,解决方案是预先使用Docker build
构建该映像,然后将该映像推送到公共Docker Hub或您自己的私有注册表,并让Docker compose文件指定该映像使用image
而不是而不是试图用build
创建它。
答案 1 :(得分:0)
您可以做的一件事是标记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