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