Docker swarm不会在集群中分发容器

时间:2019-04-01 17:10:41

标签: docker docker-compose docker-swarm

我在Docker集群Swarm中使用两台服务器(仅测试),一台是Manager,另一台是Worker,但是运行命令docker stack deploy --compose-file docker-compose.yml teste2,所有服务都在Manager和worker中运行不能接收要运行的容器,由于某些原因,Swarm无法实现在群集中分发服务并无法在Manager服务器中全部运行。

我的docker-compose.yml是否会引起该问题,或者可能是网络问题?

以下是一些设置:

  • 服务器CentOs 7,Docker版本18.09.4;
  • 我执行了systemctl stop firewalld && systemctl disable firewalld命令以禁用防火墙;
  • 我在工作线程中执行了命令docker swarm join --token ...
  • 结果docker node ls

    ID                            HOSTNAME               STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    993dko0vu6vlxjc0pyecrjeh0 *   name.server.manager    Ready               Active              Leader              18.09.4
    2fn36s94wjnu3nei75ymeuitr     name.server.worker     Ready               Active                                  18.09.4
    
  • 文件docker-compose.yml:

    version: "3"
    services:
      web:
            image: testehello
            deploy:
              replicas: 5
              update_config:
                    parallelism: 2
                    delay: 10s
              restart_policy:
                    condition: on-failure
              # placement:
                    # constraints: [node.role == worker]
            ports:
              - 4000:80
            networks:
              - webnet
    
      visualizer:
            image: dockersamples/visualizer:stable
            ports:
              - 8080:8080
            stop_grace_period: 1m30s
            volumes:
              - "/var/run/docker.sock:/var/run/docker.sock"
            deploy:
              placement:
                    constraints: [node.role == manager]
    
    networks:
      webnet:
    
  • 我执行了命令docker stack deploy --compose-file docker-compose.yml teste2

在docker-compose.yml中,我对参数 placement constraints 进行了注释,因为它们不起作用并且无法启动服务器上的容器,没有它们,容器在管理器中启动。通过可视化工具,所有内容都会显示在管理器中。

2 个答案:

答案 0 :(得分:0)

首先,尝试在没有更新选项的情况下进行部署,例如:

version: "3.2"

services:
    web:
        image: testehello
        networks:
            - webnet
        deploy:
            mode: replicated
            replicas: 2
            placement:
                constraints: [node.role == worker]
        restart: unless-stopped
        logging:
            options:
                max-size: 1m

networks:
    webnet:
        external: true

下一步,尝试添加更新选项:

version: "3.2"

services:
    web:
        image: testehello
        networks:
            - webnet
        deploy:
            mode: replicated
            replicas: 2
            placement:
                constraints: [node.role == worker]
        update_config:
            parallelism: 1
            delay: 10s
        restart: unless-stopped
        logging:
            options:
                max-size: 1m

networks:
    webnet:
        external: true

答案 1 :(得分:0)

我认为无法从工作节点访问图像,这就是为什么它们不接收容器的原因,请尝试使用 docker https://docs.docker.com/engine/swarm/stack-deploy/ 的本指南

附言我想你已经解决了,但以防万一。