【问题标题】:Docker compose 'scale' command is not scaling across multiple machinesDocker compose 'scale' 命令不会跨多台机器进行扩展
【发布时间】:2016-03-14 02:07:33
【问题描述】:
我有一个 2 机器集群。我已经在其中一台机器上安装了来自here 的简单 Docker compose 演示。但是,当我尝试使用 docker-compose scale web=5command 扩展应用程序时,它只会扩展到当前机器,并且不会按预期在 swarm 集群中的另一台机器上创建任何新的 Web 容器。
在其他人看到的每个示例中,他们的 scale 命令都可以正常工作,并且没有提到需要额外配置才能跨多个节点进行扩展。
不知道还有什么可以尝试的。从任一机器运行 scale 命令时,我得到相同的结果
请让我知道我可以提供哪些进一步的信息。
【问题讨论】:
标签:
docker
docker-compose
docker-swarm
【解决方案1】:
我现在看到有两个问题导致我的缩放命令失败,但是,即使使用正确的多主机网络设置,它仍然无法正常工作。
当从一个链接到同一个撰写应用程序中的另一个容器的撰写应用程序中缩放一个容器时 - 这失败了,因为我正在使用已弃用的(?)“链接”功能加入容器,而不是而不是使用新的multi-host networking 功能。显然,“链接”只能在单台机器上工作,不能跨多台机器扩展。 (我很确定是这种情况,但可能是错误的)
尝试扩展未链接的容器时 - 这实际上按预期工作。我忘记了在我期望 Docker 将我的容器扩展到的机器上运行的其他容器。因此,Swarm 调度程序只是将新扩展的容器放到当前机器上,因为当前机器的利用率最低。 (这是在一个 2 机器集群上)
编辑 - 实际解决方案
好的,看起来最后一个问题是我无法缩放使用 build 创建其图像的撰写应用程序部分,而不是使用 image 指定图像。
我认为这是有道理的,因为它试图将该容器扩展到的机器没有可用于创建该映像的构建文件,但我假设 Docker Compose/Swarm 足够聪明,可以解决这个问题并以某种方式复制跨机器。
所以解决方案是预先使用Docker build 构建该映像,然后将该映像推送到公共 Docker Hub 或您自己的私有注册表,并让 Docker 撰写文件使用 image 指定该映像,而不是尝试创建它与build.
【解决方案2】:
您可以做的一件事是标记 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