mysql - Docker Swarm 放置约束不起作用
问题描述
我有一个 Docker Swarm 集群,有一个管理节点和三个工作节点。我正在部署 docker-compose WordPress 和 MySQL,此部署有两个规则:
manager节点上不会有服务
WordPress 和 MySQL 服务不应该在同一个节点中
我尝试使用标签来防止 MySQL 服务与 WordPress 服务部署在同一节点中,但它无法正常工作
这是我的 docker-compose.yml 文件:
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
deploy:
labels: [region=database]
placement:
constraints:
- node.role == worker
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
deploy:
mode: replicated
replicas: 2
placement:
constraints:
- node.role == worker
- node.labels.region != database
volumes:
db_data: {}
我使用此命令进行部署
sudo docker stack deploy --compose-file docker-compose.yml stackdemo
但是,我仍然看到有时 MySQL 服务和其中一个 WordPress 服务在同一个节点上运行,并保持第三个服务器为空!
我怎样才能防止这种情况发生?有没有其他方法或者我的约束有什么问题?