Развертывание docker-compose гарантирует, что контейнер установлен на конкретном сервере - PullRequest
0 голосов
/ 15 сентября 2018

В моем файле для компоновки есть следующее:

  postgres:
    deploy:
      mode: global
      placement:
        constraints:
          - node.labels.server == data

И у моего узла есть следующее, когда я проверяю его:

"Spec": {
    "Labels": {
        "server": "data"
    },
    "Role": "worker",
    "Availability": "active"
},

Однако при развертывании моего стека postgres нигде не устанавливается ...

Чего мне не хватает?

[ОБНОВЛЕНИЕ]

Это в docker-compose.prod.yml, кстати, на случай, если вам интересно, где находится остальная часть конфигурации

[UPDATE]

Это запускает мою композицию как стек на нескольких серверах. Используя эту команду, чтобы запустить его:

docker stack deploy --compose-file docker-compose.yml --compose-file docker-compose.prod.yml stackname--with-registry-auth

Вот вывод ps:

root@sonatribe-1:~# docker service ps postgres --no-trunc
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE       ERROR               PORTS

В других службах у меня есть такие вещи, чтобы гарантировать, что определенные вещи запускаются на узле менеджера:

deploy:
  mode: global
  placement:
    constraints:
      - node.role == manager

И это прекрасно работает - это только тот, который использует:

node.labels.server == data

Это не работает

1 Ответ

0 голосов
/ 16 сентября 2018

Это работает для меня, так что я пройдусь по нему, чтобы увидеть, не пропало ли что-то на вашем конце:

Я создал рой из трех узлов с одним менеджером:

docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
diewo1v4bf2149fx422guh8ci *   dvc1                Ready               Active              Leader              18.06.1-ce
jlz2sbman8wz7sukcs41jng1n     dvc2                Ready               Active                                  18.06.1-ce
g7kocy0qo76m42o80phr6poh4     dvc3                Ready               Active                                  18.06.1-ce

Я добавляю метку к узлу 3:

docker node update dvc3 --label-add server=data

Докер узел проверяет dvc3:

"Spec": {
            "Labels": {
                "server": "data"
            },
            "Role": "worker",
            "Availability": "active"
        },

У меня есть файл compose stack.yml:

version: '3.7'

services:
  nginx:
    image: nginx:alpine
    deploy:
      mode: global
      placement:
        constraints:
          - node.labels.server == data

Я развернул стек:

docker stack deploy -c stack.yml test

Я также выполнял docker events на dvc1, который показал:

2018-09-15T23:50:49.608191542-04:00 network create yf21vjsbjpcnastxugnp3dax5 (name=test_default)
2018-09-15T23:50:49.609334207-04:00 network update yf21vjsbjpcnastxugnp3dax5 (name=test_default)
2018-09-15T23:50:49.609992316-04:00 node update diewo1v4bf2149fx422guh8ci (name=dvc1)
2018-09-15T23:50:49.610052739-04:00 node update g7kocy0qo76m42o80phr6poh4 (name=dvc3)
2018-09-15T23:50:49.610086383-04:00 node update jlz2sbman8wz7sukcs41jng1n (name=dvc2)
2018-09-15T23:50:50.067716009-04:00 service create xjgwq14ot13r1olzcsatd2ktb (name=test_nginx)
2018-09-15T23:50:50.119799354-04:00 service update xjgwq14ot13r1olzcsatd2ktb (name=test_nginx)

Я должен был также запустить события на dvc3, поэтому я поймал создание задачи (который будет отображаться только на узле, который его получает).

Давайте проверим стек и задачу:

docker service ls

ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
xjgwq14ot13r        test_nginx          global              1/1                 nginx:alpine

docker node ps dvc3
ID                  NAME                                   IMAGE               NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
w1i3fpwfy88c        test_nginx.g7kocy0qo76m42o80phr6poh4   nginx:alpine        dvc3                Running             Running about a minute ago

Надеюсь, это поможет, можете ли вы найти свое решение в этом примере и посмотретьесли это работает?

...