Не удается связаться с докером-контейнером, работающим в скоплении роя - PullRequest
0 голосов
/ 18 февраля 2019

Если это интересно: ОС: WIN10 (cygwin), код написан на Java.

Я следовал этому примеру.

Я ожидаю, что достигну service перед container, который работает на порте 80, используя myvm1IP:80 (browser ir curl).Как-то это не работает.Или я неправильно понимаю отображение портов службы?

*: 8080-> 80 / tcp

Я получил работающий кластер Docker Swarm, состоящий из 2узлы. Я могу пропинговать обе работающие виртуальные машины

Я уже понизил версию, так как были проблемы с более свежими номерами версий .Информация о движке с использованием docker inspect vmName:

    "Engine": {
        "EngineVersion": "18.06.1-ce",
        "Labels": {
            "provider": "hyperv"
        },

Я выполнил следующее docker-compose.yml:

version: "3"

services:
  web:
    image: elps/articleservice:1.1.0.4
    deploy:
      replicas: 2
      restart_policy:
        condition: on-failure
    ports:
      - "8080:80"
    environment:
      - MYSQL_HOST=192.168.178.82
      - MYSQL_DB=article
      - MYSQL_USER=root
      - MYSQL_PASSWORD=abcdefg
    networks:
      - webnet    

networks:
  webnet:

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

Вывод docker ps -a

CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                      PORTS               NAMES
979ed7ea88b7        elps/articleservice:1.1.0.4   "java -jar articlese…"   27 minutes ago      Up 27 minutes               8080/tcp            getstartedlab_web.1.j1j41so8pz6atxqnq9fqqquk7
7684c3667025        elps/articleservice:1.1.0.4   "java -jar articlese…"   27 minutes ago      Up 27 minutes               8080/tcp            getstartedlab_web.2.r4kadvztiwgpckkuannnhcsea

Вывод службы Dockerls

ID                  NAME                MODE                REPLICAS            IMAGE                         PORTS
gvyi9moxtpvq        getstartedlab_web   replicated          2/2                 elps/articleservice:1.1.0.4   *:8080->80/tcp

Выход док-машины ls

NAME    ACTIVE   DRIVER   STATE     URL                         SWARM   DOCKER        ERRORS
myvm1   *        hyperv   Running   tcp://192.168.178.88:2376           v18.06.1-ce
myvm2   -        hyperv   Running   tcp://192.168.178.89:2376           v18.06.1-ce

Когда я пытаюсь выполнить curl myvmIP:80 Я получаю

Не удалось подключиться к порту 192.168.178.88: соединение отклонено

в качестве ответа.Я ожидал бы получить код ошибки 404, поскольку для / нет сопоставления.Я не прав с этим?

1 Ответ

0 голосов
/ 23 февраля 2019

Хорошо, я просто протестировал переключение всех портов, которые у меня были, так как был уверен, что что-то не так.

  • Само приложение и контейнер работали на порте по умолчанию (8080)
  • Сервер перенаправлял входящий трафик через порт 8080 на контейнеры с портом 80 (где, очевидно, ничего не работает)

После переключения портов в конфигурации службы (docker-compose.yml) все работает нормально.

Итак, рабочий docker-compose.yml выглядит следующим образом:

version: "3"

services:
  web:
    image: elps/articleservice:1.1.0.4
    deploy:
      replicas: 2
      restart_policy:
        condition: on-failure
    ports:
      - "80:8080"
    environment:
      - MYSQL_HOST=192.168.178.82
      - MYSQL_DB=article
      - MYSQL_USER=root
      - MYSQL_PASSWORD=abcdefg
    networks:
      - webnet    

networks:
  webnet:

Таким образом, входящий трафик перенаправляется следующим образом:

Входящий трафик -> 80: Service -> 8080: Container

...