Сайт доступен в отдельном контейнере, а не в рое - PullRequest
0 голосов
/ 16 сентября 2018

У меня Docker CE, работающий на Windows Server 2016 с двумя изображениями.

когда я запускаю их в контейнерах, все в порядке.

docker run --detach --name Website1 --publish 94:94 webimage1
docker run --detach --name Website2 --publish 95:95 webimage2

Я могу получить доступ через браузер на других ПК:

Теперь я хочу запустить их в Swarm.

Я прошел учебное пособие по Docker и настроил файл для создания Docker со службами,отображение портов.У установки есть реплика Веб-сайт 1 из 1, Реплика Веб-сайт 2 из 2.

На docker stack services websites номера портов отображаются следующим образом.

Website1: *:94->94/tcp
Website2: *:95->95/tcp

, но я не могу получить к ним доступсо следующими URL:

Я получаю - Этот сайт недоступен

Если я возвращаюсь к одному из моих работающих контейнеров, я вижу, что номер порта имеет другой формат.

0.0.0.0:94->94/tcp (WORKING) VS *:94->94/tcp (NOT WORKING)

Для инициации роя Docker я использовал docker swarm init сIP-адрес хоста на порту 2377.

Вот как я развернул стек докера, используя файл compose

docker stack deploy --compose-file docker-stack.yml websites

docker-stack.yml файл для справки.

version: "3"
services:

  website1:
    image: website1:latest
    ports:
      - 94:94
    depends_on:
      - website2
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s
  website2:
    image: website2:latest
    ports:
      - 95:95
    deploy:
      mode: replicated
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s

Любое руководство будет с благодарностью.

большое спасибо

1 Ответ

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

Из разговоров в комментариях проблема со стеком.

Стек Docker поддерживает только образы для развертывания и реплики. Я считаю, что ваши изображения являются пользовательскими, которые ни в dockerhub, ни в каком-либо частном репозитории . Поэтому, когда вы пытаетесь развернуть его в стеке, служба, которая развертывается в рабочем узле, не находит такой образ и не может загрузить его из репозитория. Следовательно, служба не запускается в рабочем узле. Он отлично работает в узле менеджера, потому что изображение там уже существует.

Итак, вам нужно либо настроить локальный / частный реестр, либо отправить изображения в реестр докеров, либо вы даже можете скопировать изображения с управляющего узла на рабочий узел , используя docker save и docker load а затем попробуйте использовать Swarm и разверните его в стеке.

Обратите внимание, что при работе с роем и реестрами, при развертывании стека с использованием docker stack deploy -c composefile.yml test вы должны передать --with-registry-auth, если вы используете аутентификацию для реестров как docker stack deploy -c composefile.yml test --with-registry-auth, иначе другие узлы могут не аутентифицироваться в реестре, что приведет к не удалось загрузить изображения, если они не найдены.

Также обратите внимание, что при настройке локального частного репо без самозаверяющего сертификата или с самозаверяющим сертификатом вам может потребоваться настроить незащищенный реестр. Я дал ссылку на то же самое.

Я рекомендую настроить локальное репо без какой-либо аутентификации и сертификатов и получить к нему доступ, добавив небезопасный реестр в файл daemon.json для целей тестирования.

Теперь в соответствии с последним комментарием, где вы удалили Swarm и попытались запустить службу Docker, используя

docker service create --replicas 2 --name contentlinksapi --publish mode=host,target=94,published=94,protocol=tcp contentlinksapi

Он выбросил порт, который уже используется, потому что он пытается создать 2 реплики на одной машине. Когда первая реплика связывается с портом 94, из-за чего вторая реплика выбрасывает порт, уже использующий ошибку.

Для справки.

  1. Развертывание сервера реестра
  2. Проверка небезопасного реестра
  3. Режим обслуживания Docker (проверьте, почему службы с двумя репликами развернуты на одном хосте на docker service create)
  4. Docker save
  5. Загрузка докера
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...