首页 > 解决方案 > Docker Swarm 放置约束不起作用

问题描述

我有一个 Docker Swarm 集群,有一个管理节点和三个工作节点。我正在部署 docker-compose 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 服务在同一个节点上运行,并保持第三个服务器为空!

我怎样才能防止这种情况发生?有没有其他方法或者我的约束有什么问题?

标签: mysqlwordpressdockerdocker-composedocker-swarm

解决方案


推荐阅读