Docker Swarm-在每台机器上调度容器
我目前正在尝试使用Docker Swarm/Compose在每个集群机器上分别生成Redis的容器实例。我目前正在使用4台机器作为示例。使用关联标签的想法是确保两个redis实例不会被安排在同一台机器上 起初,以下方法奏效了Docker Swarm-在每台机器上调度容器,docker,docker-compose,docker-machine,docker-swarm,Docker,Docker Compose,Docker Machine,Docker Swarm,我目前正在尝试使用Docker Swarm/Compose在每个集群机器上分别生成Redis的容器实例。我目前正在使用4台机器作为示例。使用关联标签的想法是确保两个redis实例不会被安排在同一台机器上 起初,以下方法奏效了 redis: image: redis environment: AFFINITY: com.myself.name!=redis labels: - "com.myself.name=redis" 但是,在强制某些容器停止以模拟崩溃、将它们推
redis:
image: redis
environment:
AFFINITY: com.myself.name!=redis
labels:
- "com.myself.name=redis"
但是,在强制某些容器停止以模拟崩溃、将它们推回、关闭所有容器,然后最终使用docker compose scale redis=4
从头开始重新运行所有内容之后,我发现redis在同一台机器上运行两个容器,即使集群中有4个可用容器
我到底做错了什么?谢谢。试试这个docker compose文件
redis:
image: redis
environment:
- affinity:com.myself.name!=redis
labels:
- "com.myself.name=redis"
你应该试试这个:
redis:
image: redis
environment:
- "affinity:container!=*redis*"
labels:
- "com.myself.name=redis"
这应该管用
请让我知道我认为可能发生的情况是,一旦所有节点都获得了一个带有该标签的容器,所有节点都无效,因此它会将其作为约束删除。如果您
docker ps-a
看到所有节点都有一个容器吗?请注意,这些约束甚至会考虑停止的容器,因此您必须删除这些容器才能使其再次工作。我正在对文档进行改进,以实现这一点。